【发布时间】:2019-04-10 14:12:42
【问题描述】:
我有两个数据框列表,第一个 dfs 列表保存沿列向下延伸的值,第二个 dfs 列表保存单个值,如下所示:
dynamic_df_1 <- data.frame(x = 1:10)
dynamic_df_2 <- data.frame(y = 1:10)
df_list <- list(dynamic_df_1, dynamic_df_2)
df_list
static_df_1 <- data.frame(mu = 10,
stdev = 5)
static_df_2 <- data.frame(mu = 12,
stdev = 6)
static_df_list <- list(stat_df1 = static_df_1,
stat_df2 = static_df_2)
static_df_list
我想使用 static_df_1 和 static_df_2 中的值向每个数据框(dynamic_df_1 和 dynamic_df_2)添加一列,以执行计算,其中 dynamic_df_1 的计算使用 static_df_1 计算,dynamic_df_2 的计算使用 static_df_2 计算。
我想要的结果是这样的:
df_list[[1]] <- df_list[[1]] %>%
mutate(z = dnorm(x = df_list[[1]]$x, mean = static_df_list$stat_df1$mu, sd = static_df_list$stat_df1$stdev))
df_list
df_list[[2]] <- df_list[[2]] %>%
mutate(z = dnorm(x = df_list[[2]]$y, mean = static_df_list$stat_df2$mu, sd = static_df_list$stat_df2$stdev))
df_list
我可以采用循环方法,在我的真实代码中使用更复杂的函数:
for (i in 1:length(df_list)) {
df_list[[i]]$z <- dnorm(x = df_list[[i]][[1]], mean = static_df_list[[i]]$mu, sd = static_df_list[[i]]$stdev)
}
df_list
我正在尝试找到一个跨数据帧计算的 lapply / map / mutate 类型的解决方案 - 想象一个数据帧网格,其目标是跨行计算。也对其他解决方案开放,例如具有嵌套值的单个 df,但还没有弄清楚如何做到这一点。
希望这很清楚 - 我已经尽力了! 谢谢!
【问题讨论】:
标签: r for-loop dataframe lapply