使用如下所示的数据框,我想使用for循环遍历每个数据框并添加一些新的列new
& new1
数据框d1
和d2
。以下是我的尝试。
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
my.list <- list(d1, d2)
for(df in my.list) {
df$new <- df$y1 + df$y2
df$new1 <- df$y1 - df$y2
}
但是,当我查看原始数据框d1
和d2
时,他们不会显示新的结果new
。
> colnames(d1)
[1] "y1" "y2"
> colnames(d2)
[1] "y1" "y2"
如何将新列添加到原始数据框d1
和d2
?
答案 0 :(得分:2)
这是lapply
lst <- lapply(my.list, transform, new = y1 + y2, new1 = y1 - y2)
最好将{data}框保留在list
中,而不是更新全局环境中的对象。但是,如果确实需要的话
list2env(lst, envir = .GlobalEnv)
d1
# y1 y2 new new1
#1 1 4 5 -3
#2 2 5 7 -3
#3 3 6 9 -3
my.list <- mget(paste0("d", 1:2))
答案 1 :(得分:1)
地图版本如下所示:
BorderThickness
library(purrr) # part of the tidyverse
map(my.list, ~ mutate(.x, new = y1 + y2))
创建匿名函数。
答案 2 :(得分:0)
使用lapply或Map / map,而不是。
lapply(my.list, function(df) {df$new <- df$y1 + df$y2; df})
答案 3 :(得分:0)
请改为:
for(df in 1:length(my.list)) {
my.list[[df]]$new <- my.list[[df]]$y1 + my.list[[df]]$y2
}