繁体   English   中英

根据列中的值删除行

[英]delete rows based on value in a column

我有一个这样的 df;

NEW_df <- data.frame(CAR = c("YES","NO","MAYBE","YES","NO"),
                     BIKE = c(2,0,4,NA,9),
                     PLANE = c(8,0,6,7,9),
                     BOAT = c(0,0,0,4,0),
                     SCOOTER = c(2,3,6,9,0))

我只想删除 BOAT 列为“0”的行,当 CAR 列为“YES”或“MAYBE”时,我有这样的东西;

NEW_df2 <- data.frame(CAR = c("NO","YES","NO"),
                     BIKE = c(0,NA,9),
                     PLANE = c(0,7,9),
                     BOAT = c(0,4,0),
                     SCOOTER = c(3,9,0))

我试过这个:

NEW_df[NEW_df$BOAT %in% subset(NEW_df, CAR == "YES")$BOAT, ] 

NEW_df[NEW_df$BOAT %in% subset(NEW_df, CAR == "MAYBE")$BOAT, ] 

我确定我做错了什么。

这是使用filter()<\/code>的 tidyverse dplyr<\/code>解决方案。 与基本 R 答案相同的想法。 创建一个匹配BOAT == 0 & CAR %in% c("YES", "MAYBE")<\/code>的条件并使用 not 进行过滤以保持相反!<\/code> 操作员:

library(dplyr)

NEW_df2 <- NEW_df %>% 
  filter(!(BOAT == 0 & CAR %in% c("YES", "MAYBE" )))

print(NEW_df2)

对于subset<\/code> ,您不需要将其括在括号中。 您可以像这样包含两个条件:

subset(NEW_df, !(BOAT ==0 & CAR %in% c("YES", "MAYBE")))

  CAR BIKE PLANE BOAT SCOOTER
2  NO    0     0    0       3
4 YES   NA     7    4       9
5  NO    9     9    0       0

我想这行吗? 指定符合这些条件的行,然后选择相反的行。

NEW_df[-which(new_DF$CAR %in% c("YES", "MAYBE") & new_DF$BOAT == 0),]

  CAR BIKE PLANE BOAT SCOOTER
2  NO    0     0    0       3
4 YES   NA     7    4       9
5  NO    9     9    0       0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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