我有一个很大的列表,其中包含数千个数据帧。这些数据框每个都有多个列。因此,我想自动将每个数据框中的列绑定(bind)到一列中。这意味着它们相互附加在一起,如下所示。此后,我会将列表转换为一个数据框,由于原始列表中每个元素内的列数不同,该数据框将具有不同的列长度。
从此:
y1 y2
1 4
2 5
3 6
对此:
y1
1
2
3
4
5
6
应该对列表中的每个元素执行此操作,因此解决方案需要考虑到存在数千个不同的数据帧,无法单独提及(示例):
df1 = data.frame(
X1 = c(1, 2, 3),
X1.2 = c(4, 5, 6)
)
df2 = data.frame(
X2 = c(7, 8, 9),
X2.2 = c(1, 4, 6)
)
df3 = data.frame(
X3 = c(3, 4, 1),
X3.2 = c(8, 3, 5),
X3.3 = c(3, 1, 9)
)
listOfDataframe = list(df1, df2, df3)
最终输出:
df_final = data.frame(
X1 = c(1, 2, 3, 4, 5, 6),
X2 = c(7, 8, 9, 1, 4, 6),
X3 = c(3, 4, 1, 8, 3, 5, 3, 1, 9)
)
这个问题背后的另一个问题是行数不同,我不知道如何在数据框中解释这一点,因为列需要具有相同的长度。
预先感谢您的帮助,非常感谢。
最佳答案
使用lapply
循环遍历列表
后,我们可以取消列出
lst1 <- lapply(listOfDataframe, \(x)
setNames(data.frame(unlist(x, use.names = FALSE)), names(x)[1]))
-输出
lst1
[[1]]
X1
1 1
2 2
3 3
4 4
5 5
6 6
[[2]]
X2
1 7
2 8
3 9
4 1
5 4
6 6
[[3]]
X3
1 3
2 4
3 1
4 8
5 3
6 5
7 3
8 1
9 9
如果我们需要将list
转换为单个data.frame,请使用qPCR
中的cbind.na
do.call(qpcR:::cbind.na, lst1)
X1 X2 X3
1 1 7 3
2 2 8 4
3 3 9 1
4 4 1 8
5 5 4 3
6 6 6 5
7 NA NA 3
8 NA NA 1
9 NA NA 9
关于r - 有没有一种方法可以自动将彼此下方的数据框列附加到大型数据框列表中的一列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73885260/