【问题标题】:Number the dataframes within the list (i.e., create a column with an individual number for each dataframe)为列表中的数据框编号(即,为每个数据框创建一个带有单独编号的列)
【发布时间】:2019-04-29 12:47:33
【问题描述】:

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

【问题讨论】:

  • 请注意,在示例中,您正在创建一个 NA 列,这不是必需的

标签: r list dataframe lapply


【解决方案1】:

我们可以使用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 获取list 中的字符串标识符的值,然后使用bind_rows

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

【讨论】:

  • 我如何将它与 lapply 和一个大列表(247 个元素)一起使用?
  • @aazh 你是否在全局环境中创建了 247 个对象 'df1', df2', df3', ,df247?
  • 我在全球环境中列出了我的真实数据的 247 个对象,我只是使用了两个数据框作为可重现的示例
  • @aazh 在这种情况下,只需执行bind_rows(lst1, .id = "number") 假设list 中的所有数据集中的列名都相同
猜你喜欢
  • 2016-05-27
  • 2021-11-06
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多