繁体   English   中英

根据条件删除包含 NA 的行

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

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