[英]remove rows containing NA based on condition
df <- data.frame(x = 1:7, y = c(NA, NA, 5, 10, NA, 20, 30))
从 df 我想根据该行中的 x 值小于具有最小 y 值的行中的 x 值的条件,删除 y 中包含 NA 的行以获得此数据框。
data.frame(x = 3:7, y = c(5, 10, NA, 20, 30))
dlypr() 解决方案更可取!
我们可以使用which.min
来获取最小 'y' 值的索引,对 'x' 进行子集创建与 'x' 值的比较以及 'y' 中 NA 元素的表达式并否定( !
)
subset(df, !(x< x[which.min(y)] & is.na(y)))
-输出
x y
3 3 5
4 4 10
5 5 NA
6 6 20
7 7 30
或者同样的逻辑可以应用于dplyr::filter
library(dplyr)
df %>%
filter(!(x< x[which.min(y)] & is.na(y)))
-输出
x y
1 3 5
2 4 10
3 5 NA
4 6 20
5 7 30
df <- structure(list(x = 1:7, y = c(NA, NA, 5, 10, NA, 20, 30)),
class = "data.frame", row.names = c(NA,
-7L))
为每个条件使用逻辑索引,并将它们与逻辑 AND, &
:
df <- data.frame(x = 1:7, y = c(NA, NA, 5, 10, NA, 20, 30))
i <- is.na(df$y)
j <- df$x < df$y
df[!i & j, ]
# x y
#3 3 5
#4 4 10
#6 6 20
#7 7 30
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.