R:根据多列中的值从数据框中删除行

时间:2015-06-09 16:44:01

标签: r

我有以下数据框(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,你能帮我找出同样的问题。

提前致谢!!

3 个答案:

答案 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

等计算要删除的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”)。