假设我有两个 Dataframe :DF1和DF2,并且两者都具有变量x和y。我想使用循环函数创建以下新 Dataframe :
DF1
DF2
x
y
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 并为它们应用公式?找不到同时考虑这两个问题的任何答案。
a8jjtwal1#
一种方法是创建一个函数,将所有内容放入列表中,然后使用lapply循环该函数数据
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]) }
1条答案
按热度按时间a8jjtwal1#
一种方法是创建一个函数,将所有内容放入列表中,然后使用
lapply
循环该函数数据
代码
此输出返回一个嵌套列表-每个外部位置表示输入 Dataframe ,每个 Dataframe 都有两个内部列表,分别表示乘法(第一个)和除法(第二个)操作。
如果你需要在一个列表中放置大量的 Dataframe ,如果它们都共享相同的模式(例如,“df”),你可以这样做:
它将把全局环境中带有“df”的所有对象放到一个列表中
最后,如果您真的想使用“dfx.1”将新值分配给全局环境,请使用“dfx.2”,如以下问题所示: