r - 选择仅包含外部列表中的值的列

标签 r dplyr

我想过滤数据框,以便只保留其中包含值 1、2、3、4、5 或 NA 的列。

x = data.frame(col1 = c("a" , "b", "d", "e", "f", "g"), 
           col2 = c(12, 45, 235, 2134, NA, 1), 
           col3 = c(1, 2, 3, 1, 2, NA), 
           col4 = c(1, 2, 3, 4, 5, NA), 
           col5 = c(1, 2, 3, 4, 5, 6))

对于此示例数据,我想返回仅包含第 3 列和第 4 列的 x。

最佳答案

您可以使用以下解决方案:

library(dplyr)

x %>%
  select(where(function(x) all(x %in% c(1:5, NA))))

  col3 col4
1    1    1
2    2    2
3    3    3
4    1    4
5    2    5
6   NA   NA

或者使用公式:

x %>%
  select(where(~ all(.x %in% c(1:5, NA))))

由于对此的讨论刚刚升温,如果您想知道 R 如何解释由 ~ 发音为 twiddle 创建的公式,只需将其包装在 中即可purrr::as_mapper。当您将此语法用于匿名函数时,这是 R 在幕后调用的函数:

as_mapper(~ all(.x %in% c(1:5, NA)))

<lambda>
function (..., .x = ..1, .y = ..2, . = ..1) 
all(.x %in% c(1:5, NA))
attr(,"class")
[1] "rlang_lambda_function" "function" 

这里.x参数相当于我们匿名函数的第一个参数。

关于r - 选择仅包含外部列表中的值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69817989/

相关文章:

r - 我应该使用哪个函数将非结构化文本文件读入R?

R:确定组内某些子组的最大值和最小值之间的差异

r - 使用 %in% 通过列表过滤多列并在 R 中过滤

r - 将组副标题和小计行添加到 R 中的 data.frame 或表

r - 有没有一种快速计算多列乘法结果的方法,但根据 NA 值具有不同的比例?

r - 使用 href 信息框作为操作按钮

r - 将一列的所有值汇总到一个向量中

r - 扩展两个值之间的组并计算唯一出现的次数

r - 如何确定列是定量数据还是分类数据?

r - 如何根据另一列中较大的值过滤行?