【问题标题】:Select columns based on column value range with dplyr使用 dplyr 根据列值范围选择列
【发布时间】:2020-12-23 20:50:25
【问题描述】:

假设我有这个数据集:

df <- data.frame(a = rep(1:2, 5), 
                 b = c("value", "character", "string", "anotherstring", "character", NA, "code", "variable", NA, "cell"), 
                 c = c(1, 2, 5, 4, 5, 7, 8, 9, 6, 10),
                 d = rep(2:1, 5), 
                 e = rep(1, 10))

df
   a             b  c d e
1  1         value  1 2 1
2  2     character  2 1 1
3  1        string  5 2 1
4  2 anotherstring  4 1 1
5  1     character  5 2 1
6  2          <NA>  7 1 1
7  1          code  8 2 1
8  2      variable  9 1 1
9  1          <NA>  6 2 1
10 2          cell 10 1 1

我想从 df 中选择值为 1 和 2 的列(因此只有 ad 列)。假设我不知道列名,是否有一种有效的方法可以根据 dplyr 中列值的范围对数据进行子集化?我最初使用select_ifselect_at 的尝试没有成功。提前致谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    你可以使用:

    library(dplyr)
    df %>%  select_if(~any(. == 1) & any(. == 2) & all(. %in% 1:2))
    
    #   a d
    #1  1 2
    #2  2 1
    #3  1 2
    #4  2 1
    #5  1 2
    #6  2 1
    #7  1 2
    #8  2 1
    #9  1 2
    #10 2 1
    

    在较新版本的dplyr 中可以写成:

    df %>%  select(where(~any(. == 1) & any(. == 2) & all(. %in% 1:2)))
    

    在基础 R Filter 中相同:

    Filter(function(x) any(x == 1) & any(x == 2) & all(x %in% 1:2) , df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多