我有一个数据帧列表。我想向每个数据框添加一个新列。例如,我有三个数据帧,如下所示:
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”循环中,并且将不同的值添加到每个数据帧。
任何帮助将不胜感激。预先感谢!
答案 0 :(得分:1)
假设您要为每个数据框添加一个值为Language.Haskell.Interpreter
的新列。我们可以使用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
或者如@camille所述,如果您在lapply(seq_along(dfs), function(i) cbind(dfs[[i]], new_column = new_value[i]))
循环中使用[[
进行索引,则可以使用
for
等效的for (i in seq_along(dfs)) {
dfs[[i]]$new_column <- new_value[[i]]
}
版本是
purrr
和
library(purrr)
map2(dfs, new_value, cbind)