Пронумеруйте кадры данных в списке (т.е. создайте столбец с индивидуальным номером для каждого кадра данных) - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно иметь возможность различать кадры данных в большом списке по отдельному номеру, чтобы я мог 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 Ответ

1 голос
/ 29 апреля 2019

Мы можем использовать 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")
...