Как добавить столбец к фреймам данных в списке?
У меня есть список фреймов данных. Я хочу добавить новый столбец в каждый фрейм данных. Например, у меня есть три кадра данных следующим образом:
a = data.frame("Name" = c("John","Dor"))
b = data.frame("Name" = c("John2","Dor2"))
c = data.frame("Name" = c("John3","Dor3"))
Затем я помещаю их в список:
dfs = list(a,b,c)
Затем я хочу добавить новый столбец с уникальным значением для каждого фрейма данных, например:
dfs[1]$new_column <- 5
Но я получаю следующую ошибку:
"number of items to replace is not a multiple of replacement length"
Я также попытался использовать две скобки:
dfs[[1]]$new_column <- 5
Это не возвращает ошибку, но не добавляет столбец.
Это будет в цикле for, и к каждому фрейму данных будет добавлено другое значение.
Любая помощь приветствуется. Заранее спасибо!
1 ответ
Допустим, вы хотите добавить новый столбец со значением 5:7
для каждого кадра данных. Мы можем использовать Map
new_value <- 5:7
Map(cbind, dfs, new_column = new_value)
#[[1]]
# Name new_column
#1 John 5
#2 Dor 5
#[[2]]
# Name new_column
#1 John2 6
#2 Dor2 6
#[[3]]
# Name new_column
#1 John3 7
#2 Dor3 7
С участием lapply
ты мог бы сделать
lapply(seq_along(dfs), function(i) cbind(dfs[[i]], new_column = new_value[i]))
Или, как сказал @camille, это работает, если вы используете [[
для индексации в for
петля
for (i in seq_along(dfs)) {
dfs[[i]]$new_column <- new_value[[i]]
}
Эквивалент purrr
версия этого будет
library(purrr)
map2(dfs, new_value, cbind)
а также
map(seq_along(dfs), ~cbind(dfs[[.]], new_colum = new_value[.]))