首页 > 解决方案 > 在 R 中创建具有不同名称的数据帧的循环

问题描述

我正在运行一些模拟,并且在执行一个循环时遇到问题,该循环提取列表中包含的大量数据帧列,然后对其进行转换。特别是,我不知道如何为每一列创建一个新的数据框,因为代码没有将“i”作为数据框名称。这是一个可重现的示例:

#libraries
library(dplyr)
library(tidyr)
library(ggfan)


#Create a dataframe 
month <- 1:120 
price_a <- 5000 
demand <- 10
data <- data.frame(month, price_a, demand)

#Create 100 simulations 
simulations <- 100
intervalo <- seq_len(120)
set.seed(96)
lista_meses <- lapply(setNames(intervalo, paste0("data", intervalo)), function(i) {
  cbind(
    data[rep(i, simulations),],
    growth_pricea = as.numeric(runif(simulations, min = -0.02, max = 0.05)),
    growth_demand = as.numeric(runif(simulations, min = -0.03, max = 0.03)),
    revenue = demand*price_a
  )
})

time <- 1:120 

#Loop to extract each column and transform it HERE IS THE PROBLEM
column_names <- c("growth_pricea", "growth_demand", "revenue")

for (i in column_names) {
extract_i <- lapply(lista_meses, function(x) x[i]) #As I name each new dataframe with _i, it does not create one per column

fandataq_i <- do.call("cbind", extract_i) 
mandataq_i <- as.matrix.data.frame(fandataq_i)

pdataq_i <- data.frame(x=time, t(fandataq_i)) %>% gather(key=sim, value=y, -x)

#Extract quantile vlues
label_i <- calc_quantiles(pdataq_i, intervals = c(0.95, 0), x_var = "x", y_var = "y") %>%
  ungroup() %>%
  filter(x == max(x)) 
}

有人知道如何为每一列创建这些数据框吗?预先感谢!

标签: rdataframeloops

解决方案


推荐阅读