遍历数据框列表并改变列

时间:2018-03-21 16:36:18

标签: r

使用如下所示的数据框,我想使用for循环遍历每个数据框并添加一些新的列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
}

但是,当我查看原始数据框d1d2时,他们不会显示新的结果new

> colnames(d1)
[1] "y1" "y2"
> colnames(d2)
[1] "y1" "y2"

如何将新列添加到原始数据框d1d2

4 个答案:

答案 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 }