如何在 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)),]
我有庞大的数据集,其中包含超过数百万行并且具有一些特殊属性。我需要过滤保留其其他属性的数据。
我的数据如下:
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)),]