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