Как связать много фреймов данных? - PullRequest
1 голос
/ 29 февраля 2020

У меня 247 фреймов данных, которые имеют последовательные имена (y1, y2, y3, ...., y247). Они получены из следующего кода:

for (i in (1:247)) {

  nam <- paste("y", i, sep = "")
  assign(nam, dairy[dairy$FARM==i,"YIT"])
}

I wi sh, чтобы связать их всех, чтобы иметь:

df <- cbind(y1,y2,...,y247)

Можно ли сделать это с помощью al oop без ввода все 247 фреймов данных?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Создание многих переменных в al oop, как вы делаете, не очень хорошая идея. Вместо этого вы должны использовать список:

ys <- split(dairy$FARM, dairy$FARM)
names(ys) <- paste0("y", names(ys))

Первая строка создает список ys, который содержит ваш y1 в качестве первого элемента (ys[[1]]), ваш y2 в качестве второго элемента (ys[[2]]) и так далее. Вторая строка именует элементы списка так же, как вы называли свои переменные (y1, y2, et c.), Поскольку в конце они будут использоваться для именования столбцов во фрейме данных.

В пакете dplyr есть функция, которая берет список фреймов данных и связывает их все вместе в виде столбцов:

library(dplyr)
df <- bind_cols(ys)

Обратите внимание, что это будет работать только если каждое значение появляется в столбце FARM ровно столько же раз, так как все столбцы во фрейме данных должны иметь одинаковую длину.

0 голосов
/ 29 февраля 2020

Если вы действительно хотите это сделать, это возможно:

df <- y1
for (i in 2:247) {
  df <- cbind(df, eval(parse(text=paste("y", i, sep = ''))))
}
...