簡體   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