r - 将 data.frames 列表的列表转换为 R 中的单个 data.frame

标签 r list function dataframe lapply

我有一个 data.frameslist(参见下面的 L)。

我想知道是否可以将L转换为我的如下所示的所需输出,即单个data.frame

L <- list(A = list(Short = data.frame(d = 1:2, SD = 3:4)), 
          B = list(Short = data.frame(d = 2:3, SD = 1:2), Long1 = data.frame(d = 7:8, SD = 6:7)),
          C = list(Short = data.frame(d = 5:6, SD = 3:4), Long1 = data.frame(d = 8:9, SD = 1:2), 
               Long2 = data.frame(d = 4:5, SD = 6:7)))

所需输出(data.frame):

d  SD id
1  3   1
2  4   1
2  1   2
3  2   2
7  6   2
8  7   2
5  3   3
6  4   3
8  1   3
9  2   3
4  6   3
5  7   3

最佳答案

我们可以尝试重新绑定(bind)L中的每个列表,并添加一个新列来表示列表编号,最后使用do.call将整个列表放入一个数据帧中,并且rbind

output <- do.call(rbind, lapply(seq_along(L), function(x) 
                          transform(do.call(rbind, L[[x]]), id = x)))
rownames(output) <- NULL

output
#   d SD id
#1  1  3  1
#2  2  4  1
#3  2  1  2
#4  3  2  2
#5  7  6  2
#6  8  7  2
#7  5  3  3
#8  6  4  3
#9  8  1  3
#10 9  2  3
#11 4  6  3
#12 5  7  3
<小时/>

使用dplyrbind_rowspurrr::map可能会更短,但这给出了id 变量作为列表的名称(ABC)而不是序列,应该不难更改。

library(dplyr)
bind_rows(purrr::map(L, bind_rows), .id = "id")  %>%
          mutate(id = match(id, unique(id)))

关于r - 将 data.frames 列表的列表转换为 R 中的单个 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57454864/

相关文章:

python - 如何创建 "list"类的子类,它在实例化时自行排序?

objective-c - 在 Objective C 中将可变长度的 int 数组作为函数参数传递

javascript - 我的代码正确吗,我使用的书错了吗?

R:多个连续 gsub 的函数式方法

r - 添加或保留前导零而不转换为字符格式

r - 测量绘图的 "ink"

performance - 在 F# 中有效地投影列表列表

python - 如何绘制 Shapely 点列表

R data.table 立即 reshape 列 block

java - 为什么这个 Szudzik Elegant Pairing 给出了错误的结果?