r - 有没有一种方法可以自动将彼此下方的数据框列附加到大型数据框列表中的一列中?

标签 r list dataframe

我有一个很大的列表,其中包含数千个数据帧。这些数据框每个都有多个列。因此,我想自动将每个数据框中的列绑定(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)
)

这个问题背后的另一个问题是行数不同,我不知道如何在数据框中解释这一点,因为列需要具有相同的长度。

预先感谢您的帮助,非常感谢。

R 中列表的结构: List L with data frame elements

最佳答案

使用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/

相关文章:

r - 使用 Leaflet(对于 R)加载 SpatialPolygonsDataFrame 不起作用

java - asp MVC 存储库中的返回类型问题

python - 使用 Python 从一系列列表中选择项目

java - 如何使用属性名称搜索java对象列表

将数据帧的列的 "names"替换为 R 中另一个文件中的不同(新)名称

python - np.where() 转换失败

r - 将多个图组合成一个 gif

r - 计数表中的 ggplot2 箱线图

r - R中数据框中数字的字母

python - 迭代数据框并保留列的最大值