为列表中的数据框编号(即,为每个数据框创建一个具有单独编号的列)

时间:2019-04-29 12:47:33

标签: r list dataframe lapply

我需要能够用一个单独的数字来区分大列表中的数据框,以便在绑定数据框后可以基于该数字group_by(在我的情况下,无法仅使用一个列表,没有绑定)。

示例:

df1 <- data.frame(matrix(ncol = 3, nrow = 8))
colnames(df1) <- c("a", "b")
df1$a <- seq(1, 8)
df1$b <- seq(4, 11)
df1
df2 <- data.frame(matrix(ncol = 3, nrow = 8))
colnames(df2) <- c("a", "b")
df2$a <- seq(2, 9)
df2$b <- seq(5, 12) 
df2
list <- as.list.data.frame(c(df1, df2))
bind <- do.call("rbind", list)

预期结果:

bind
   a  b number
 1 1  4      1
 2 2  5      1
 3 3  6      1
 4 4  7      1
 5 5  8      1
 6 6  9      1
 7 7 10      1
 8 8 11      1
 9 2  5      2
10 3  6      2
11 4  7      2
12 5  8      2
13 6  9      2
14 7 10      2
15 8 11      2
16 9 12      2

1 个答案:

答案 0 :(得分:1)

我们可以使用bind_rows并指定.id来创建分组索引变量

library(tidyverse)
bind_rows(df1[-3], df2[-3], .id = "number")

或者使用base R的{​​{1}}

Map

如果存在多个具有相同模式标识符'df1','df2',...,'df247'的对象名称,请使用do.call(rbind, Map(cbind, list(df1[-3], df2[-3]), number = 1:2)) 来获取{{1}中的字符串标识符的值},然后使用mget

list