![](/img/trans.png)
[英]Remove rows in R data frame based on values in columns not found in a list
[英]R: Remove rows from data frame based on values in several columns
我有以下数据框(df) - 有更多列,但这些是相关列:
ID Cost
1 $100
1 $200
2 $50
2 $0
2 $40
3 $10
4 $100
5 $0
5 $50
我想对这个数据框进行子集化,这样如果特定ID的任何成本= $ 0,那么它应该删除所有那些行(即该特定ID的所有行)。
因此,在此示例中,ID 2和5包含$ 0,因此应删除所有ID 2和ID 5行。
这是我想要的结果:
ID Cost
1 $100
1 $200
3 $10
4 $100
有人可以帮忙吗? 我尝试了subset
函数的一些组合,但它没有用。
**在类似的说明中:我有另一个带有“NA”的数据框 - 如果它是NA而不是0,你能帮我找出同样的问题吗?
提前致谢!!
尝试这个:
subset(df,!df$ID %in% df$ID[is.na(df$Cost) | df$Cost == "$0"])
这给你:
ID Cost
1 1 $100
2 1 $200
6 3 $10
7 4 $100
尝试
df[!df$ID %in% df$ID[df$Cost=="$0"],]
您可以使用tapply
等计算要删除的ID:
(has.zero <- tapply(df$Cost, df$ID, function(x) sum(x == 0) > 0))
# 1 2 3 4 5
# FALSE TRUE FALSE FALSE TRUE
然后,您可以将子集限制为您不想删除的ID:
df[!df$ID %in% names(has.zero)[has.zero],]
# ID Cost
# 1 1 100
# 2 1 200
# 6 3 10
# 7 4 100
这非常灵活,因为它使您能够根据更复杂的标准限制ID(例如“ID的平均成本必须至少为xyz”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.