【发布时间】:2018-08-03 17:37:41
【问题描述】:
我想在管道内应用一年的线性外推。我想做的和这个simple example without grouping非常相似。但在管道内并使用dplyr::group_by()。有一些示例like this one、this one 或this one。但我无法获得理想的输出。
可重现的例子:
test.frame <- data.frame(Country =
rep(c("Austria", "Brazil", "Canada"), each = 3, times = 3),
Entity = rep(c("CO2","CH4","N2O"), times = 9),
Year = rep(c(1990:1992), each = 9),
value = runif(27, 1,5))
test.frame2 <- data.frame(Country =
rep(c("Austria", "Brazil", "Canada"), each = 3),
Entity = rep(c("CO2","CH4","N2O"), times = 3),
Year = rep(c(1993), each = 3),
value = 0)
results_frame <- test.frame %>%
dplyr::bind_rows(test.frame2)
我有两个分组类别(国家和实体),我想使用 1990 年到 1992 年的值来使用线性外推法填充 1993 年的值。 在this的基础上,我可以估计线性模型:
linear_model <- test.frame %>%
dplyr::group_by(Country, Entity) %>%
lm(value ~ Year, data=.)
results <- predict.lm(linear_model, test.frame2)
但是,results 没有显示理想的输出。所以按照here提出的解决方案,我尝试以下方法:
results_frame <- test.frame %>%
dplyr::group_by(Country, Entity) %>%
do(lm( value ~ Year , data = test.frame)) %>%
predict.lm(linear_model, test.frame2) %>%
bind_rows(test.frame)
但它不起作用,而是我得到了
错误:Results 1, 2, 3, 4, 5, ... 必须是数据帧,而不是 lm
任何帮助将不胜感激!
【问题讨论】: