У меня есть список, содержащий несколько фреймов данных, и каждый элемент списка имеет уникальное имя. Структура похожа на эти фиктивные данные
a <- data.frame(z = rnorm(20), y = rnorm(20))
b <- data.frame(z = rnorm(30), y = rnorm(30))
c <- data.frame(z = rnorm(40), y = rnorm(40))
d <- data.frame(z = rnorm(50), y = rnorm(50))
my.list <- list(a,b,c,d)
names(my.list) <- c("a","b","c","d")
Я хочу создать столбец в каждом из фреймов данных, который имеет имя соответствующего элемента списка. Моя цель - объединить все элементы списка в единый фрейм данных и узнать, из какого фрейма данных они исходили. Конечный результат, который я ищу, выглядит примерно так:
z y group
1 0.6169132 0.09803228 a
2 1.1610584 0.50356131 a
3 0.6399438 0.84810547 a
4 1.0878453 1.00472105 b
5 -0.3137200 -1.20707112 b
6 1.1428834 0.87852556 b
7 -1.0651735 -0.18614224 c
8 1.1629891 -0.30184443 c
9 -0.7980089 -0.35578381 c
10 1.4651651 -0.30586852 d
11 1.1936547 1.98858128 d
12 1.6284174 -0.17042835 d
Моя первая мысль заключалась в том, чтобы использовать mutate для присвоения имени элемента списка столбцу в каждом соответствующем фрейме данных, но оказалось, что при использовании в lapply, names () относится к именам столбцов, а не к именам элементов списка.
test <- lapply(my.list, function(x) mutate(x, group = names(x)))
Error: Column `group` must be length 20 (the number of rows) or one, not 2
Какие-либо предложения относительно того, как я могу решить эту проблему?