【问题标题】:How can I extract specific columns from a list of dataframes with lapply?如何使用 lapply 从数据框列表中提取特定列?
【发布时间】:2022-10-26 00:28:08
【问题描述】:

我有一个包含九个数据帧(称为data)的列表,每个数据帧的长度和内容都不同。但是,与其中大多数一致的是包含我想存储在单独数据框中以供以后使用的信息的列。 这些列如下:

identifiers <- c("Organism Name", "Protein names", "Gene names", "Pathway", "Biological Process")

我想遍历data 的每个元素以检查它是否包含我感兴趣的列,然后将这些列子集为单独的数据框。

我第一次尝试

lapply(data, '[', identifiers]

这样做的问题是,并非所有 dfs 都包含上面列出的所有标识符,因此运行它会返回“选择的未定义列”。

我的下一次尝试是

lapply(data, function(x) if(identifiers %in% x) '[', identifiers)

它返回了 NULL 类的 9 个列表(对应于 9 个原始数据帧)。我认为这种通用方法可以正确执行,但我无法弄清楚。

任何帮助,将不胜感激 :)

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    由于identifiers 是列名的向量,其中一些或全部可能在每一帧中,我们可以这样做:

    lapply(data, function(x) x[,intersect(names(x), identifiers),drop=FALSE])
    

    理解某些元素可能有零列(如果没有找到)。

    【讨论】:

      【解决方案2】:

      我们可以做

      lapply(data, function(x) if(identifiers %in% names(x)) x['identifiers'])
      

      【讨论】:

        猜你喜欢
        • 2017-03-01
        • 1970-01-01
        • 2018-07-09
        • 2019-03-22
        • 2012-04-22
        • 2013-10-24
        相关资源
        最近更新 更多