2

「first」と「second」の 2 つのデータ フレームがあるとします。

x = c(12,14,11,15,10)
y = c(25,22,20,21,23)
id = c(1,1,1,2,2)
first = data.frame(x,y,id)
x1 = c(32,34,31,35,30)
y1 = c(45,42,40,41,43)
id1 = c(1,1,1,1,2)
second = data.frame(x1,y1,id1)
colnames(second) <- c("x", "y", "id")

ここで「id」はグループ番号を表します。この例では、「id」で行数をカウントできるようにしたいと考えています。いずれかのデータ フレームの特定の 'id' の行数が 2 未満の場合、両方のデータ フレームからそれらの行を削除したいと思います。

つまり、いずれかのグループが 2 行未満の場合、そのグループを両方のデータ フレームから削除します。

助けてくれてありがとう。

4

2 に答える 2

1

を使用してこれを行う方法は次のdata.tableとおりです。

library(data.table)
dt1 = data.table(first, key = 'id')
dt2 = data.table(second, key = 'id')

throw.away.ids = c(dt1[, .N < 2, by = id][(V1), id],
                   dt2[, .N < 2, by = id][(V1), id])

dt1[!J(throw.away.ids)]
dt2[!J(throw.away.ids)]

両方のデータ セットから取得する必要があるすべての ID をフィルター処理し、それらを組み合わせてフィルターで除外しました。throw.away.ids次の結合操作には関係ないため、一意にはしませんでした。

于 2013-05-23T21:04:26.550 に答える
0

次のコードはトリックを行います。

id.first = unique(first$id)
id.second = unique(second$id)
ids = NULL
for(i in unique(first$id)){
    if(i %in% id.second && sum(first$id == i) >= 2 && sum(second$id == i) >= 2){
      ids = c(ids, i)
    } 
}
first = first[first$id %in% ids,]
second = second[second$id %in% ids,]
于 2013-05-23T21:00:19.720 に答える