遍历数据框列表并改变列

use*_*440 5 r

对于如下所示的数据框,我想使用 for 循环遍历每个数据框并添加一些新列 say new&new1到数据框d1d2. 以下是我尝试过的。

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
}
Run Code Online (Sandbox Code Playgroud)

但是,当我查看原始数据框时d1d2它们没有显示新的 col new

> colnames(d1)
[1] "y1" "y2"
> colnames(d2)
[1] "y1" "y2"
Run Code Online (Sandbox Code Playgroud)

我如何获得有关获取添加到原始数据帧新的列d1d2

akr*_*run 2

这是一个选项lapply

lst <- lapply(my.list, transform, new = y1 + y2, new1 = y1 - y2)
Run Code Online (Sandbox Code Playgroud)

最好将“data.frame”保留在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
Run Code Online (Sandbox Code Playgroud)

数据

my.list <- mget(paste0("d", 1:2))
Run Code Online (Sandbox Code Playgroud)