0

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

4

2 回答 2

0

这应该有效:

do.call(cbind,list(imp.qua.00.09, exp.qua.00.09, net))
于 2013-11-08T10:27:30.737 回答
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(即列表,第一次迭代除外),第二个元素是子集。所以基本上最后你会得到一种由两个元素组成的递归列表,其中第二个是 data.frame 子集,第一个是具有相同结构的两个元素的列表,共有十个级别。

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

t <- lapply(1:length(net),
            function(i){cbind(imp.qua.00.09[i], exp.qua.00.09[i], net[i])})
于 2013-11-08T10:36:29.190 回答