【问题标题】:Extract columns with same names from multiple data frames [R]从多个数据框中提取具有相同名称的列 [R]
【发布时间】:2014-06-12 22:52:14
【问题描述】:

我正在处理大约 10 个具有相同列名但行数不同的数据框。我想创建一个包含所有同名列的列表。

所以,假设我有 2 个同名的数据框。

a<-seq(0,20,1)
b<-seq(20,40,1)
c<-seq(10,30,1)

df.abc.1<-data.frame(a,b,c)

a<-seq(20,50,1)
b<-seq(10,40,1)
c<-seq(30,60,1)

df.abc.2<-data.frame(a,b,c)

我知道我可以根据这些数据创建一个列表,例如,

list(df.abc.1$a, df.abc.2$a)

但我不想输入我的长数据框名称和列名称。

我希望做这样的事情,

list(c(df.abc.1, df.abc.2)$a)

但是,它返回一个 df.abc.1$a 列表

也许有一种方法可以跨多个 data.frames 使用 grep 函数? 也许一个循环可以完成这项任务?

【问题讨论】:

    标签: r


    【解决方案1】:

    不确定是不是更好,但也许

    lapply(list(df.abc.1, df.abc.2), function(x) x$a)
    

    不止一列

    lapply(list(df.abc.1, df.abc.2), function(x) x[, c("a","b")])
    

    【讨论】:

    • 太棒了!这可能是一个长镜头,但是,我知道在 ls() 中我可以指定一个模式 (pattern="df") 来列出我的 data.frames 的名称。但是,我不知道如何使用它来指定列表函数中的对象。
    • 试试ls.str(pattern= "df")
    • 几乎,我想我只是懒惰,希望 R 做这一切。当我做a&lt;-ls(pattern="df") 它给了我"df.abc.1" "df.abc.2" 但我真正想要的是df.abc.1, df.abc.2 然后我想在你提供的列表函数中输入一个。感谢您的宝贵意见。
    • 也许你可以写: lapply(lapply(ls(pattern="df"),get),[,"a") #extracting "column a"。
    • ^ 天才!!完美运行!这就是在我的代码中使用它的方式,lapply(lapply(ls(pattern="scp"), get), function(x) x$NMDA.max)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多