首页 > 解决方案 > 为列表中的数据框编号(即,为每个数据框创建一个带有单独编号的列)

问题描述

我需要能够用一个单独的数字来区分大列表中的数据框,以便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

标签: rlistdataframelapply

解决方案


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

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

base R使用Map

do.call(rbind, Map(cbind, list(df1[-3], df2[-3]), number = 1:2))

如果有多个对象名称具有相同的模式标识符'df1'、'df2'、...、'df247',则使用mget获取a中的字符串标识符的值,list然后使用bind_rows

bind_rows(mget(paste0("df", 1:247)), .id = "number")

推荐阅读