如何一次为多个 Dataframe 计算公式?

ny6fqffe  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(122)

假设我有两个 Dataframe :DF1DF2,并且两者都具有变量xy
我想使用循环函数创建以下新 Dataframe :

Df1.1 <- DF1$X*DF1$Y
Df1.2 <- DF1$X/DF1$Y
Df2.1 <- DF2$X*DF2$Y
Df2.2 <- DF2$X/DF2$Y

我如何使用循环来创建新的 Dataframe 并为它们应用公式?找不到同时考虑这两个问题的任何答案。

a8jjtwal

a8jjtwal1#

一种方法是创建一个函数,将所有内容放入列表中,然后使用lapply循环该函数
数据

df1 <- data.frame(x = 1:5,
                  y = 101:105)
df2 <- data.frame(x = 1:10,
                  y = 51:60)

代码

exfun <- function(df){
  mult <- df[,"x"] * df[,"y"]
  divi <- df[,"x"] / df[,"y"]
  list(mult, divi)
}

lapply(list(df1, df2), exfun)

此输出返回一个嵌套列表-每个外部位置表示输入 Dataframe ,每个 Dataframe 都有两个内部列表,分别表示乘法(第一个)和除法(第二个)操作。
如果你需要在一个列表中放置大量的 Dataframe ,如果它们都共享相同的模式(例如,“df”),你可以这样做:

l <- do.call("list", mget(grep("df", names(.GlobalEnv), value = TRUE)))

lapply(l, exfun)

它将把全局环境中带有“df”的所有对象放到一个列表中
最后,如果您真的想使用“dfx.1”将新值分配给全局环境,请使用“dfx.2”,如以下问题所示:

dfs <- grep("df", names(.GlobalEnv), value = TRUE)

for(i in dfs){
  assign(paste0(i, ".1"), get(i)[,1] * get(i)[,2])
  assign(paste0(i, ".2"), get(i)[,1] / get(i)[,2])
}

相关问题