繁体   English   中英

如何向列表中的数据框添加一列?

[英]How do you add a column to data frames in a list?

我有一个数据框列表。 我想为每个数据框添加一个新列。 例如,我有如下三个数据框:

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”循环中,并且将向每个数据帧添加不同的值。

任何帮助将非常感激。 提前致谢!

假设您要为每个数据框添加一个值为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[.]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM