Как заполнить Годы в списке данных в R - PullRequest
0 голосов
/ 15 июня 2019

У меня есть список из 11 фреймов данных, и я хочу создать новый столбец в каждом фрейме данных и заполнить столбец годом как c(2005:2015). Проблема в том, что он повторяет 11 элементов (лет) для 255 строк в кадре данных и, следовательно, показывает ошибку. То, что я хочу, это не должно повторяться для строк в кадрах данных, но итерация для кадров данных в списке. Таким образом, первый кадр данных имеет 255 строк года, показывающих значение 2005 и т. Д.

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

tf2 <- lapply(tf2, function(x) mutate(x, YEAR = c(2005:2015)))

Примечание: mutate нельзя напрямую применить к объекту класса list.

Я пытаюсь что-то новое, как это, но мой код ошибочен, его нужно исправить.

year <- c(2005:2015)

ChangeYears = function(x)
  {
  for i in 1:length(tf2)
  {
    x[i] <- lapply(mutate(YEAR = c(year[i])))
  }
  }

tf2 <- lapply(tf2, ChangeYears)

На основании изменений, предложенных @GSW, я пытаюсь это сделать

ChangeYears = function(x){
  for(i in 1:11) {
    x[[i]] = cbind(x[[i]], Year=2004+i) }

}

lapply(tf2, ChangeYears)

Но я получаю следующую ошибку. Error in .subset2(x, i, exact = exact) : subscript out of bounds.

1 Ответ

1 голос
/ 15 июня 2019

Вот простой пример.

## A list of 11 data frames
tf2 = list()
for(i in 1:11) {
    tf2[[i]] = data.frame(x = rnorm(10), y = rnorm(10)) }


## Add a year column to each. 
for(i in 1:11) {
    tf2[[i]] = cbind(tf2[[i]], Year=2004+i) }

Дополнительно:

Это изменяет предложенную вами функцию, чтобы она работала.

ChangeYears = function(x){
  for(i in 1:11) {
    x[[i]] = cbind(x[[i]], Year=2004+i) }
  x
}

tf2 = ChangeYears(tf2)
...