Добавление новых столбцов в списки данных с использованием lapply () на основе других элементов списка - PullRequest
0 голосов
/ 12 ноября 2018

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

Я на самом деле думал, что это довольно простая задача, пока не столкнулся с проблемами с индексами части назначения, как показано ниже:

# sample data
data_list <- list(data.frame(names=c("iris", "TootgGrowth", "airquality"), key=c("name01", "name02", "name03")),
                  iris, ToothGrowth, airquality)
names(data_list) <- c("index", "name01", "name02", "name03")

# adding a new column to selected list-dataframes
data_list[names(data_list) != "index"] <-
  lapply(names(data_list)[names(data_list) != "index"],
       function(x){data_list[x]$new_col <- data_list$index$names[data_list$index$key == x]})

Часть data_list$index$names[data_list$index$key == x] дает мне правильные значения, которые я хотел бы присвоить, но я до сих пор не знаю, как правильно индексировать в части data_list[x]$new_col <-, чтобы назначение работало. Я также пытался использовать assign(paste0("data_list$", x, "$new_col"), ...), что тоже явно не работает.

Спасибо за ваши предложения!

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете попробовать что-то вроде

lapply(names(data_list), function(x) {
   if (x != "index")
     cbind(data_list[[x]],new_col = data_list$index$names[data_list$index$key == x])
   else
     data_list[[x]]
})

Если name элемента списка равен «index», то мы возвращаем фрейм данных таким, как он есть, а если нет, то добавляем new_col к фрейму данных с его именем.

...