Конвертировать LIst в Dataframe, используя для L oop и сохраняя под разными именами в R - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь преобразовать мой список, состоящий из 52 компонентов, в фрейм данных для каждого из компонентов. Без использования for l oop будет выглядеть примерно так, что утомительно:

df1 = as.data.frame(list[1])
df2 = as.data.frame(list[2])
df3 = as.data.frame(list[3])
.
.
.
df50 = as.data.frame(list[50])

Как мне добиться этого с помощью for l oop? Моя попытка:

for (i in seq_along(list)) {
  noquote(paste0("df", i)) = as.data.frame(list[i]) 
}

Error: target of assignment expands to non-language objec

Я думаю, мне придется задействовать assign.

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Мы можем использовать assign вместо noquote из функции ОП

for (i in seq_along(list)) {
    assign(paste0("df", i), value = list[[i]]) 
    }
1 голос
/ 28 февраля 2020

Если у вас есть список фреймов данных в list, вы можете назвать их, а затем использовать list2env, чтобы они представляли собой отдельные фреймы данных в среде.

names(list) <- paste0('df', seq_along(list))
list2env(list, .GlobalEnv)

Используя воспроизводимый пример,

temp <- list(mtcars, mtcars)
names(temp) <- paste0('df', seq_along(temp))
list2env(temp, .GlobalEnv)


head(df1)
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

head(df2)
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Однако учтите, что

  • list является внутренней функцией в R, поэтому лучше назвать ваши переменные как-нибудь еще.
  • Как предложил @MrFlick, постарайтесь сохранить ваши данные в списке, поскольку списками проще управлять, чем создавать многочисленные объекты в вашей глобальной среде.
...