【问题标题】:Merging a list of vectors with a list of dataframes in R将向量列表与 R 中的数据框列表合并
【发布时间】:2014-07-10 14:34:54
【问题描述】:

我有一个数据框列表lsD 和一个向量列表lsV。向量的长度与数据帧中的行数相同(在玩具示例中 = 5)。

我想将向量作为附加列添加到每个数据框。我让它与for 循环一起工作,但我的一般问题是:如何在没有for 的情况下按名称遍历两个列表?有lapply 的方法吗?

这是一个玩具示例和我使用 for 循环的解决方案:

lsV <- list(x = sample(LETTERS[1:5], 5,replace=T), 
            y = sample(LETTERS[1:5], 5, replace=T), 
            z=sample(LETTERS[1:5], 5, replace=T))

lsD <- list(x = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)), 
        y = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)),
        z =  data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)))

for (i in 1:length(lsV)) {lsD[[i]]<-cbind(lsD[[i]], lsV[[i]])}

有什么想法吗?我尝试了以下方法,但当然它没有用。谢谢!

lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)})

【问题讨论】:

    标签: r list for-loop lapply


    【解决方案1】:

    Map 函数在这里很有用

     Map(cbind, lsD, Z=lsV)
    

    Mapmapply 都是应用风格的函数,它们接受多个参数并同时迭代它们。

    lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)})
    

    永远不会起作用,因为您不能将变量名与“$”运算符一起使用。你可以使用

    lapply(names(lsD), function(X) {lsD[[X]]<-cbind(lsD[[X]], lsV[[X]])})
    

    【讨论】:

    • 嗨弗利克先生!谢谢,简直太美了!我以前没有使用过Map,但它完全符合我的需要,所以我会阅读更多内容!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多