使用过滤器选择R中多列的特定值

xa9qqrwz  于 2023-03-15  发布在  其他
关注(0)|答案(3)|浏览(128)

尝试在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。使用上述尝试给出了一个错误'输入必须是逻辑向量,而不是一个双精度'。任何建议,以纠正上述错误,以及如何应用此命令到所有三列。

zzoitvuj

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)
  )
euoag5mw

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
gkn4icbw

gkn4icbw3#

首先,请提供一个可重现的示例:

x <- c(1:5, NA)
y <- c(3:4, NA, 5:6, NA)
z <- c(2:4, NA, 5:6)

那么我建议使用{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/

相关问题