在R的循环内将数据框的新列创建到全局环境中

时间:2019-02-14 16:02:52

标签: r for-loop lapply

所以我想获取一个具有两个不同列的除法值的新列。我正在尝试对多个dfs执行此操作。我知道循环可以在没有Assign函数的情况下工作,但是不幸的是,它并没有将其保存在全局环境中。

vect是具有多个数据帧的向量

for (i in vect) {
      i$new <- i[,2] / i[,3]
      print(i)
}

我正在寻找一种可行的方式来重写它:

assign(i$new, i[,2] / i[,3],envir = .GlobalEnv)

1 个答案:

答案 0 :(得分:0)

您可以使用lapply将新列绑定到列表中的每个数据帧中。

dfs <- list(df1 <- data.frame(x = c(1,2,3,4,5),
                              y = c(2,3,4,5,6)),
            df2 <- data.frame(x = c(5,6,7,8,9),
                              y = c(1,3,4,5,6)))

dfs <- lapply(dfs, function(d){
  new <- d$x/d$y
  cbind(d, new)} )

dfs

> dfs
[[1]]
  x y       new
1 1 2 0.5000000
2 2 3 0.6666667
3 3 4 0.7500000
4 4 5 0.8000000
5 5 6 0.8333333

[[2]]
  x y  new
1 5 1 5.00
2 6 3 2.00
3 7 4 1.75
4 8 5 1.60
5 9 6 1.50