首页 > 解决方案 > 在R中的循环内创建新的数据框列到全局环境中

问题描述

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

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

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

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

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

标签: rfor-looplapply

解决方案


您可以使用 lapply 将新列 cbind 到列表中的每个数据框中。

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

推荐阅读