![](/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.