【问题标题】:in R: combine columns of different dataframes在 R 中:组合不同数据框的列
【发布时间】:2013-11-08 10:03:56
【问题描述】:

我尝试组合三个不同数据帧的每一列,以获得一个与原始数据帧长度相同且每个子对象三列的对象。每个原始数据框都有 10 列和 14 行。 我用for循环尝试过,但结果对我不可用。

t <- NULL
for(i in 1 : length(net)) { 
    a <- cbind(imp.qua.00.09[i], exp.qua.00.09[i], net[i])
    t <- list(t, a) 
}
t

但最后我想获得 10 个具有三列的独立数据框。 所以我想循环一下:

a <- cbind(imp.qua.00.09[i], exp.qua.00.09[i], net[i])

对于每个原始数据帧的每一列。但是如果我使用t &lt;- list(t, a),它会构建一个疯狂的列表。谢谢。

【问题讨论】:

    标签: r for-loop multiple-columns


    【解决方案1】:

    您用于将元素附加到t 的代码是错误的,您应该这样做:

    t <- list()
    for(i in 1:length(net)) { 
      a <- cbind(imp.qua.00.09[i], exp.qua.00.09[i], net[i])
      t[[length(t)+1]] <- a
    }
    t
    

    您的代码是错误的,因为在每一步中,您都将 t 转换为一个列表,其中第一个元素是前一个 t(这是一个列表,第一次迭代除外),第二个元素是子集.所以基本上最后你会得到一种由两个元素组成的递归列表,其中第二个是 data.frame 子集,第一个是具有相同结构的两个元素的列表,共十级。

    无论如何,您的代码相当于这个单行代码(这可能更有效,因为它不执行任何列表连接):

    t <- lapply(1:length(net),
                function(i){cbind(imp.qua.00.09[i], exp.qua.00.09[i], net[i])})
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      do.call(cbind,list(imp.qua.00.09, exp.qua.00.09, net))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        相关资源
        最近更新 更多