Как создать переменную, которая указывает, откуда данные в каждом элементе списка в r - PullRequest
0 голосов
/ 10 января 2020

Мой вопрос заключается в том, что я сказал в заголовке, и я нашел вопрос Дака таким же, как и мой ( Как создать в R новую переменную для каждого элемента в списке фреймов данных с именем фрейма данных и его значением равно положению элемента ).

Насколько я плохо знаю R, я плохо понимаю код, хотя он действительно получил то, что хотел.

Я знаю свой код не могу запустить, но я думаю, что код должен выглядеть так:

# create a fake data
df1 <- split(mtcars,mtcars$cyl)

# add a new variable that indicate where the element from in the list with the element name
df2 <- map(df1, mutate(from = names(df1)))

Любая помощь будет высоко оценена!

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Вы можете использовать imap из purrr, чтобы включить имя списка в качестве нового столбца

purrr::imap(df1, ~dplyr::mutate(.x, from = .y))

#$`4`
#    mpg cyl  disp  hp drat    wt  qsec vs am gear carb from
#1  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    4
#2  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2    4
#3  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2    4
#4  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1    4
#5  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2    4
#6  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1    4
#7  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1    4
#8  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1    4
#9  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2    4
#10 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2    4
#11 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2    4

#$`6`
#   mpg cyl  disp  hp drat    wt  qsec vs am gear carb from
#1 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4    6
#2 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4    6
#3 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    6
#....

В базе R мы можем использовать Map

Map(cbind, df1, from = names(df1))
#Same as 
#purrr::map2(df1, names(df1), cbind)
1 голос
/ 10 января 2020

Другая базовая опция R:

split(transform(mtcars, from=cyl), mtcars$cyl)
0 голосов
/ 10 января 2020

Мы можем использовать transform с Map в base R

Map(transform, df1, from = names(df1))
...