【发布时间】:2021-09-11 00:49:26
【问题描述】:
df <- data.frame("date"=
1:4,"product"=c("B","B","A","A"),"subproduct"=c("1","2","x","y"),"actuals"=1:4)
#creates df1,df2,dfx,dfy
for(i in unique(df$subproduct)) {
nam <- paste("df", i, sep = ".")
assign(nam, df[df$subproduct==i,])
}
# CREATES LIST OF DATAFRAMES
# How do I make this so i don't have to manually type list(df.,df.,df.)
list_df <- list(df.1,df.2,df.x,df.y) %>%
lapply( function(x) x[(names(x) %in% c("date", "actuals"))])
# creates df1,df2,df3,df4 only dates and actuals, removes the other column names
for (i in 1:length(list_df)) {
assign(paste0("df", i), as.data.frame(list_df[[i]]))
}
对于第一个 for 循环,它根据唯一的子产品创建一个 df 对象。对于 list() 函数,我希望不必输入 df.1 ... df2... 等,所以如果我的数据中有 100 个唯一的子产品,我就不需要输入这个 df。 1、df.2、df.x、df.y、df.z、df.zzz、df。一遍又一遍地。我如何最好地做到这一点(1 个问题)
最后一个 for 循环创建单独的数据框对象,只有日期和实际值将用于为每个对象创建时间序列。如何将这些对象的值放入单个数据框或 dfs 列表中? (第二个问题)
【问题讨论】:
-
你要不要
split(df[1:2], df[3])?? -
第一个循环根据独特的子产品创建数据帧,因此在这种情况下有 4 个新的 dfs。我想最终为每个新的 DF 添加 20 多列,所以将它放入 df 列表中是我想要做的。 list_df 行是手动实现的,但我想这样做,所以我不需要输入每个唯一 df 的名称。
-
这里不需要任何 for 循环。就像我提供的代码一样,您似乎正在拆分数据。
-
嗯,你是对的,这可以工作。我会玩弄它。稍后更新
标签: r list dataframe time-series data-manipulation