R 将lappy调用的输出写入单个表
我在数据集中使用Lappy作为R 将lappy调用的输出写入单个表,r,lapply,R,Lapply,我在数据集中使用Lappy作为 dt <- read.table(text ="Year Premium Silver Budget Jan2016 112354 36745 456563 Feb2016 1233445 234322 4533345 Mar2016 13456544 346755 34564422", header = TRUE) library
dt <- read.table(text ="Year Premium Silver Budget
Jan2016 112354 36745 456563
Feb2016 1233445 234322 4533345
Mar2016 13456544 346755 34564422", header = TRUE)
library(forecast)
library(data.table)
dt <- data.table(dt)
res <- lapply(c("Premium", "Silver", "Budget"), function(x) {
count <- dt[, get(x)]
tickets <-
ts(count, frequency = 12,start = c(2016, 1),end = c(2018, 6)
)
pi = auto.arima(tickets)
forecast(pi, h = 12)
})
我想将此数据写入表中,如下所示
Month_year Premium Silver Budget
Apr 2019 2.4078098 12.4078098 32.4078098
May 2019 0.2415010 10.2415010 30.2415010
Jun 2019 0.3093233 10.3093233 30.3093233
Jul 2019 2.2816647 12.2816647 32.2816647
我一直在使用下面的,以获得一个单一类别的预期结果
df <- data.frame(res)
newdf<- df %>% rownames_to_column("month_year")
newq <- data.frame(newdf$month_year,newdf$Point.Forecast)
df我们将'res'的名称设置为'dt'列名(除'Year'列外),循环遍历'res'的名称,在提取第一列后将其转换为data.table
(这可以通过提取mean
或转换为data.frame
,然后获得第一列来完成),通过
merge`ing on'Month\u Year'将减少为单个数据
names(res) <- names(dt)[-1]
lst1 <- lapply(names(res), function(x) setnames(setDT(as.data.frame(res[[x]])[1],
keep.rownames = TRUE), c("Month_Year", x))[])
Reduce(function(...) merge(..., by = "Month_Year"), lst1)
这太棒了!谢谢!!:)
names(res) <- names(dt)[-1]
lst1 <- lapply(names(res), function(x) setnames(setDT(as.data.frame(res[[x]])[1],
keep.rownames = TRUE), c("Month_Year", x))[])
Reduce(function(...) merge(..., by = "Month_Year"), lst1)
library(tidyverse)
imap(res, ~ .x %>%
as.data.frame %>%
select(!! .y := `Point Forecast`) %>%
rownames_to_column("Month_year")) %>%
reduce(inner_join, by = "Month_year")