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