我有以下数据框(df) - 有更多列,但这些是相关列:
ID Cost
1 $100
1 $200
3 $10
4 $100
我想对此数据框进行子集,以便如果特定ID的任何成本= $ 0,那么它应该删除所有这些行(即该特定ID的所有行。)
因此,在此示例中,ID 2和5包含$ 0,因此应删除所有ID 2和ID 5行。
以下是我想要的结果:
subset
有人可以帮忙吗?我尝试了tintColor
函数的某些组合,但它没有用。
**在类似的说明中:我有另一个带有“NA”的数据框 - 如果它是NA而不是0,你能帮我找出同样的问题。
提前致谢!!
答案 0 :(得分:4)
试试这个:
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
答案 1 :(得分:3)
尝试
df[!df$ID %in% df$ID[df$Cost=="$0"],]
答案 2 :(得分:1)
您可以使用tapply
:
(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”)。