如何在 R 中过滤数据?

How to filter data in R?

我有庞大的数据集,其中包含超过数百万行并且具有一些特殊属性。我需要过滤保留其其他属性的数据。

我的数据如下:

      ID   Prop1   Prop2   TotalProp
56891940     G02     G02           2
56892558     A61     G02           4
56892558     A61     A61           4
56892558     G02     A61           4
56892558     A61     A61           4
56892552     B61     B61           3
56892552     B61     B61           3
56892552     B61     A61           3
56892559     B61     G61           3
56892559     B61     B61           3
56892559     B61     B61           3 and so on more than million rows

我想要的是,如果 ID 为 56891940 和 56892559 且 "prop1" 和 "prop2" 相同但 56892558 和 56892559 不相同的所有行,我需要删除行,因为有些行相同但至少它的一个属性是不同的,所以我想保留 56892558、56892552 和 56892559 等的所有值。

我的最终输出应该是这样的:

      ID   Prop1   Prop2   TotalProp
56892558     A61     G02           4
56892558     A61     A61           4
56892558     G02     A61           4
56892558     A61     A61           4
56892552     B61     B61           3
56892552     B61     B61           3
56892552     B61     A61           3    
56892559     B61     G61           3
56892559     B61     C61           3
56892559     B61     B61           3

你可以试试

library(data.table)
setDT(df1)[, .SD[any(Prop1!=Prop2)], ID]
#          ID Prop1 Prop2 TotalProp
# 1: 56892558   A61   G02         4
# 2: 56892558   A61   A61         4
# 3: 56892558   G02   A61         4
# 4: 56892558   A61   A61         4
# 5: 56892552   B61   B61         3
# 6: 56892552   B61   B61         3
# 7: 56892552   B61   A61         3
# 8: 56892559   B61   G61         3
# 9: 56892559   B61   B61         3
#10: 56892559   B61   B61         3

或者按照@Frank 的建议

setDT(df1)[, if(any(Prop1!=Prop2)) .SD, ID]

使用 dplyr

的类似选项
library(dplyr)
df1 %>%
    group_by(ID) %>%
    filter(any(Prop1!=Prop2))

或使用 base R

中的 ave
df1[with(df1, ave(Prop1!=Prop2, ID, FUN=any)),]