尝试在R中使用筛选功能,仅选择多列中需要的值,并包括缺失值。
x <- 1:2:3:4:5:NA y <- 3:4:NA:5:6:NA z <- 2:3:4:NA:5:6 df <- data.frame(x, y, z) df %>% filter(x != 1, 2, 3 | is.na(x))
我试图过滤值超过4列x,y和z保持NA。使用上述尝试给出了一个错误'输入必须是逻辑向量,而不是一个双精度'。任何建议,以纠正上述错误,以及如何应用此命令到所有三列。
zzoitvuj1#
下面是一个使用dplyr的解决方案:
df = data.frame( x = c(1,2,3,4,5,NA), y = c(3,4,NA,5,6,NA), z = c(2,3,4,NA,5,6) ) df %>% filter( x >= 4 | is.na(x), y >= 4 | is.na(y), z >= 4 | is.na(z) )
euoag5mw2#
以R为基
subset(df, pmin(x, y, z, na.rm = TRUE)>=4) x y z 4 4 5 NA 5 5 6 5 6 NA NA 6
如果您有非常有管理列,且不想按名称引用它们:
subset(df, do.call(pmin, c(na.rm = TRUE, df)) >=4) x y z 4 4 5 NA 5 5 6 5 6 NA NA 6
gkn4icbw3#
首先,请提供一个可重现的示例:
x <- c(1:5, NA) y <- c(3:4, NA, 5:6, NA) z <- c(2:4, NA, 5:6)
那么我建议使用{data.table}包。
{data.table}
library(data.table) dt <- data.table(x, y, z)
然后你可以像这样应用过滤器
dt[x >= 4 | is.na(x), ]
(意思是,给予我表中x大于或等于4或x为NA的所有行。)您可以进一步合并其他逻辑约束:
dt[(x >= 4 | is.na(x)) | (y >= 4 | is.na(y)) | (z >= 4 | is.na(z)), ]
有关{data.table}语法的更多信息,请访问:https://rdatatable.gitlab.io/data.table/
3条答案
按热度按时间zzoitvuj1#
下面是一个使用dplyr的解决方案:
euoag5mw2#
以R为基
如果您有非常有管理列,且不想按名称引用它们:
gkn4icbw3#
首先,请提供一个可重现的示例:
那么我建议使用
{data.table}
包。然后你可以像这样应用过滤器
(意思是,给予我表中x大于或等于4或x为NA的所有行。)
您可以进一步合并其他逻辑约束:
有关
{data.table}
语法的更多信息,请访问:https://rdatatable.gitlab.io/data.table/