【问题标题】:Subset list of dataframes containing specific column name包含特定列名的数据框的子集列表
【发布时间】:2020-05-28 12:15:08
【问题描述】:

我有一个数据框列表,我想从每个数据框中获取列x 作为字符串。

testing <- list(data.frame(A = "Yes", B = "No"),
                data.frame(B = "No", C = "No"),
                data.frame(A = "Yes"))

我可以打印哪些数据帧中包含 colname A,但我无法连接到原始测试的子集

lapply(testing, function(x) "A" %in% colnames(x))

期望的输出

[[1]]
    A  B
1 Yes No

[[2]]
    A
1 Yes

【问题讨论】:

  • 如果您有诸如c("A", "AB", "CA") 之类的列名,请注意接受的答案将返回所有这些列。检查grepl("A", x = c("A", "AB", "ABC"), fixed = TRUE)c("A", "AB", "CA") %in% "A"

标签: r list subset lapply purrr


【解决方案1】:

我们可以使用sapply 来创建逻辑vector 和子集

testing[sapply(testing, function(x) "A" %in% colnames(x))]

【讨论】:

    【解决方案2】:

    涉及purrr 的一个选项可能是:

    keep(testing, ~ any(grepl("A", names(.), fixed = TRUE)))
    
    [[1]]
        A  B
    1 Yes No
    
    [[2]]
        A
    1 Yes
    

    或者:

    keep(testing, ~ sum(names(.) == "A") != 0)
    

    如果所需的输出确实是让 A 列作为字符串返回,并添加 dplyr:

    map(keep(testing, ~ any(grepl("A", names(.), fixed = TRUE))), ~ .x %>%
         pull(A) %>%
         as.character())
    
    [[1]]
    [1] "Yes"
    
    [[2]]
    [1] "Yes"
    

    或者:

    map(keep(testing, ~ sum(names(.) == "A") != 0), ~ .x %>%
         pull(A) %>%
         as.character())
    

    【讨论】:

      【解决方案3】:

      另一个基本选项是Filter

      out <- Filter(function(x) "A" %in% names(x), testing)
      out
      #[[1]]
      #    A  B
      #1 Yes No
      #
      #[[2]]
      #    A
      #1 Yes
      

      【讨论】:

        猜你喜欢
        • 2020-07-12
        • 2020-11-15
        • 2016-11-02
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多