在R中:组合不同数据帧的列

时间:2013-11-08 10:03:57

标签: r for-loop multiple-columns

我尝试组合三个不同数据帧的每一列,以获得与原始数据帧长度相同的对象和每个子对象的三列。每个原始数据帧有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 <- list(t, a),它会构建一个疯狂的列表。感谢。

2 个答案:

答案 0 :(得分:0)

这应该有效:

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

答案 1 :(得分:0)

您用于将元素附加到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的列表(除了第一个迭代之外的列表),第二个元素element是子集。所以基本上最后你得到一个由两个元素组成的递归列表,其中第二个是data.frame子集,第一个是同样结构的两个元素的列表,分为十个级别。

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

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