在管道中将dplyr中的group_by()与predict.lm和do()一起使用以进行年度线性外推

巴勃罗

我想在管道中应用一年的线性外推法。我想做的事情与没有分组的简单示例非常相似但在管道内使用dplyr::group_by()有一些例子像这样的这一个这一个但是我无法获得理想的输出。

可重现的示例:

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年的值。基于,我可以估计线性模型:

linear_model <- test.frame %>%  
dplyr::group_by(Country, Entity) %>% 
lm(value ~ Year, data=.)

results <- predict.lm(linear_model, test.frame2)

但是,这results并没有显示出理想的输出。因此,按照此处提出的解决方案我尝试以下操作:

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)

但这不起作用,相反,我得到了

错误:结果1、2、3、4、5,...必须是数据帧,而不是lm

任何帮助将不胜感激!

拉尔夫·斯塔伯纳

在拟合和预测时,必须小心使用正确的数据:

library(dplyr)
set.seed(42)
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.frame %>%
  group_by(Country, Entity) %>% 
  do(lm( value ~ Year , data = .) %>% 
       predict(., data.frame(Year = 1993)) %>%
       data_frame(Year = 1993, value = .)) %>%
  bind_rows(test.frame)
#> # A tibble: 36 x 4
#> # Groups:   Country, Entity [9]
#>    Country Entity  Year value
#>    <fct>   <fct>  <dbl> <dbl>
#>  1 Austria CH4     1993 2.10 
#>  2 Austria CO2     1993 2.03 
#>  3 Austria N2O     1993 6.02 
#>  4 Brazil  CH4     1993 4.90 
#>  5 Brazil  CO2     1993 0.771
#>  6 Brazil  N2O     1993 5.28 
#>  7 Canada  CH4     1993 4.69 
#>  8 Canada  CO2     1993 0.729
#>  9 Canada  N2O     1993 1.49 
#> 10 Austria CO2     1990 4.66 
#> # ... with 26 more rows

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

管道中的group_by和group_by_

group_by变量和dplyr中的和

dplyr中的表和group_by

是否可以使用dplyr在单个group_by中将summary和summarise_at组合在一起

将 ntile() 与 group_by() 与 dplyr 一起使用

如何使用 R、dplyr 进行年度比较?

如何解压缩dplyr管道的group_by()do()输出

dplyr:group_by之后摘要中的管道

使用dplyr计数group_by中的子组

将dplyr与group_by一起使用,并对类别变量进行过滤

如何使分位数与summarise_at和group_by(dplyr)一起使用

dplyr:与group_by()一起使用时,lead()和lag()错误

将grep与管道和&符一起使用以过滤来自find的错误

dplyr和tail更改r中group_by中的最后一个值

如何在此代码中将此管道与另一个管道一起使用以过滤Angular中的数据?

dplyr对嵌套group_by进行总结

使用 dplyr、group_by、summary 进行 for 循环,并将每个变量的输出保存在列表中

dplyr中的if语句,位于group_by,do()和更多链/多个条件之后

dplyr group_by()和slice()在组内

dplyr group_by和迭代循环计算

在 R group_by 和 dplyr 内循环

如何根据dplyr中的group_by对列中的值进行排序

如何使用 R 和 dplyr 中连续的元素执行 group_by

使用 dplyr、filter、group_by 和 summarise 计算 R 中的平均天数?

使用嵌套 group_by 时 dplyr 出错

然后使用dplyr过滤Group_by

在函数中使用dplyr的问题(group_by)

使用dplyr的group_by的na.locf

在函数中使用dplyr group_by