繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM