我有一个包含大量组的面板数据集。我计算了每组的拟合值,我想将所有拟合值组合成一个新的数据集。我正在寻找一种可能的捷径,以避免必须手动执行此操作。
以下数据集类似于我正在处理的数据集(尽管在群组方面规模要小得多)。
set.seed(999)
dt <- data.frame("Group"=rep((LETTERS[1:10]), each=15),
"Year"=2001:2015,"value"=5+rnorm(150, 3,1))
names(dt)
head(dt)
table(dt$Year, dt$Group)
library(reshape2)
dt_tbl1 <- dcast(dt,Year~Group)
dt_tbl1
library(forecast)
tsMat <- ts(dcast(dt, Year ~ Group), start=2001, freq=1)
dt_ses <- lapply(tsMat, function(x) ses(x))
我正在寻找一些自动执行以下步骤的帮助。添加数据框中的所有剩余组。
dt_tbl2 <- data.frame("Year"=2001:2015,
data.frame(dt_ses$A$fitted),
data.frame(dt_ses$B$fitted),
data.frame(dt_ses$C$fitted))
并重命名新数据集中的变量以与原始组相关联
names(dt_tbl2)[2:4] <- c("A_hat", "B_hat", "C_hat")
完成此操作后,dt_tbl2应具有与dt_tbl1相同的格式。
我曾尝试使用sapply()和lapply(),但似乎没有任何工作。 谢谢 TCS
答案 0 :(得分:1)
<html><head>
dt_tbl = data.frame(Year = c(tsMat[,1]), sapply(colnames(tsMat)[-1], function(col) {dt_ses[[col]]$fitted})) names(dt_tbl)[-1] = paste0(names(dt_tbl)[-1], "_hat")
答案 1 :(得分:1)
您可以在transpose
包中试用purrr
,它会转置嵌套列表。
library(purrr)
t_dt_ses <- transpose(dt_ses)
dt_tbl3 <- data.frame(t_dt_ses$fitted)
# update the year column
dt_tbl3$Year<- 2001:2015
head(dt_tbl3)
# Year A B C D E F G H I J
# 1 2001 7.618084 7.521736 8.709448 7.967254 8.096049 7.932307 7.997542 7.552510 7.855070 8.136634
# 2 2002 7.662074 7.521647 9.150131 7.967285 8.095947 7.932320 7.997708 7.552295 7.855037 8.136680
# 3 2003 7.234079 7.521702 9.005576 7.967083 8.096054 7.932381 7.997711 7.552369 7.855063 8.136535
# 4 2004 7.919614 7.521760 8.787972 7.967088 8.096149 7.932181 7.997613 7.552552 7.854865 8.136433
# 5 2005 8.073512 7.521898 8.865025 7.967149 8.096250 7.932232 7.997742 7.552446 7.854703 8.136329
# 6 2006 7.919455 7.521738 8.572195 7.967149 8.096238 7.932222 7.997629 7.552423 7.854840 8.136423