【发布时间】:2021-02-08 20:42:32
【问题描述】:
我正在尝试运行模拟,但在按 i 排序的列表中存储多个名为“data_i”的数据帧时遇到问题。我从一个名为“data_”的 df 开始,其中包含从 1901 到 2032(132 行)的数据。我应用一个循环来为每行创建一个名为 data_1、data_2、data_3、...、data_132 的数据帧(第 2032 行存储在 data_132 中)。最后,我将所有这些数据帧存储在一个列表中,并使用 lapply 在每个数据帧中创建一个列。这是一个可重现的示例:
#Main dataframe
time <- 1901:2032
b <- 1:132
data_ <- data.frame(time,b)
#Loop for creating data_i where i goes from 1 to 132
simulations <- 10000
for (i in 1:132) {
assign(paste("data_",i, sep = ""), as.data.frame( sapply(data_[i,], function(n) rep(n,simulations)), stringsAsFactors = FALSE ))
}
#Store all dataframes in list (**I THINK THE PROBLEM IS HERE**)
data_names<-str_extract(ls(), '^data_[[:digit:]]{1,3}$')[!is.na(str_extract(ls(), '^data_[[:digit:]]{1,3}$'))]
dataframes<-lapply(data_names, function(x)get(x))
#Create a new column in each dataframe
new_list <- lapply(dataframes, function(x) cbind(x, production = as.numeric(runif(simulations, min = 50, max = 100))))
#Create data_newi in environnment
list2env(setNames(new_list,paste0("data_new", seq_along(dataframes))),
envir = parent.frame())
代码运行,但问题是数据帧的顺序不是 data_1, data_2,data_3,...,data_132 而是 data_1,data_10,data_100,data_101...这会生成 data_names 按该顺序存储这些值.例如,这将导致 2032 不像我希望的那样在 data_new132 中。
有人知道如何解决这个问题吗?提前致谢!
【问题讨论】: