【问题标题】:Subset Over A List of Dataframes With Different Column Names and Multiple Selections具有不同列名和多项选择的数据框列表的子集
【发布时间】:2017-03-01 05:25:46
【问题描述】:

给定具有唯一列名的数据框列表,最终目标是提取这些列与每个数据框按顺序匹配标准的行。示例:

Sp1<-c("Elm","Maple","Oak")
Sp2<-c("Elm", "Aspen", "Oak")
Height1<-c(2,4,6)
Height2<-c(4,6,8)
Site_1<-data.frame(Sp1,Height1)
Site_2<-data.frame(Sp2,Height2)
Tree_List<-list(Site_1=Site_1,Site_2=Site_2)

现在开始我知道,如果我执行以下代码,它将为单个选择返回所需的输出:

subset(Tree_List[[1]], Tree_List[[1]][1]=="Elm")

我还知道,如果我按特定名称调用列,我可以提取多个选择所需的输出:

subset(Tree_List[[1]], Sp1 %in% c("Elm","Oak"))

由于我使用 for 循环遍历列表中具有相同列号但不同列名的所有数据帧,因此我的尝试是:

subset(Tree_List[[1]], Tree_List[[1]][1] %in% c("Elm","Oak"))

不幸的是,这会返回

的输出
<0 rows> (or 0-length row.names)

而不是所需的输出。有什么想法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用lapply 循环遍历data.frame 和子集的list 来做到这一点

    lapply(Tree_List, function(x) x[x[,1] %in% c("Elm", "Oak"),])
    

    关于 OP 代码中的问题,Tree_List[[1]][1] 仍然是带有一列的data.frame。我们需要将该列提取为vector

    subset(Tree_List[[1]], Tree_List[[1]][,1] %in% c("Elm","Oak"))
    #  Sp1 Height1
    #1 Elm       2
    #3 Oak       6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2021-11-28
      • 2019-02-10
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多