~500,000 行と 45 列のデータセットがあります。Rの「unique()」関数のように、互いに重複している行を削除したい(最初に出現したものを保持し、残りを削除する)が、削除された行ごとに、どの行を保存したいかを保存したいに等しく保たれます。
これは少し説明が難しいと思うので、同じことを別の言い方で言います。データセット内の同一の行の各セット (S と呼びます) について、そのうちの 1 つだけをデータセットに保持したいと思います (保持されたものを K と呼びます)。そして、他のサイズ(S)-1の同一の行を破棄したい(それらをDと呼びます)。D の各要素について、K のインデックスを知りたいです。
for ループでこれを行うことができますが、unique() や duplicated() などを使用したよりエレガントな方法があるかどうか疑問に思っています。変数名「pioneers」は K を意味し、「dupes」は D を意味し、「dupes.i」は D のインデックスを意味することに注意してください。
pioneers <- unique(genos.varying)
dupes.i <- duplicated(genos.varying)
dupes <- genos.varying[dupes.i,]
# note -- look at the rowname of the pioneer to see where it was in the 'original' dataset
which.pioneer.by.dupes <- matrix(data=NA, nrow=nrow(dupes))
for(d in 1:nrow(dupes)) {
for(p in 1:nrow(pioneers)) {
if (all(pioneers[p,] == dupes[d,])) {
which.pioneer.by.dupes[d] <- p
}
}
}
あなたが提供できるアドバイスをありがとう!
また、人々がより簡単に作業できるようにするための練習用データセットを次に示します。
genos.varying <- matrix(c(1,2,3,7,6,4,1,2,3,4,3,6), ncol = 3, byrow=TRUE)
出力は、次の行に沿ったものになるはずです。
Keep rows 1,2, and 4. Row 3 is a duplicate of row 1.