[英]Alternative of summarise() function in dplyr
food_consumption %>%
group_by(food_category) %>%
summarise(mod= lm(co2_emmission ~ consumption))
運行此代碼后,我收到以下錯誤
錯誤:列
mod
長度必須為 1(匯總值),而不是 12
我怎樣才能做到正確,並獲得每個類別的回歸結果?
我們可以將lm
模型的輸出包裝在一個list
因為它有很多組件,並且summarise
想要返回的每組長度為 1
library(dplyr)
food_consumption %>%
group_by(food_category) %>%
summarise(mod= list(lm(co2_emmission ~ consumption)))
在dplyr
的devel
版本中,可以使用condense
,它會自動返回一個list
food_consumption %>%
group_by(food_category) %>%
condense(mod= lm(co2_emmission ~ consumption))
使用可重現的示例
mtcars %>%
group_by(cyl) %>%
summarise(mod = list(lm(mpg ~ gear)))
# A tibble: 3 x 2
# cyl mod
# <dbl> <list>
#1 4 <lm>
#2 6 <lm>
#3 8 <lm>
或與condense
mtcars %>%
group_by(cyl) %>%
condense(mod = lm(mpg ~ gear))
# A tibble: 3 x 2
# Rowwise: cyl
# cyl mod
# <dbl> <list>
#1 4 <lm>
#2 6 <lm>
#3 8 <lm>
為了得到系數
mtcars %>%
group_by(cyl) %>%
condense(mod = lm(mpg ~ gear), Coef = coef(mod))
# A tibble: 3 x 3
# Rowwise: cyl
# cyl mod Coef
# <dbl> <list> <list>
#1 4 <lm> <dbl [2]>
#2 6 <lm> <dbl [2]>
#3 8 <lm> <dbl [2]>
或者使用mutate
和map
mtcars %>%
group_by(cyl) %>%
summarise(mod = list(lm(mpg ~ gear))) %>%
mutate(Coef = map(mod, coef))
# A tibble: 3 x 3
# cyl mod Coef
# <dbl> <list> <list>
#1 4 <lm> <dbl [2]>
#2 6 <lm> <dbl [2]>
#3 8 <lm> <dbl [2]>
或者另一個選項是nest
然后map
list
library(purrr)
mtcars %>%
group_by(cyl) %>%
nest %>%
transmute(mod = map(data, ~ lm(mpg ~ gear, data = .x)))
# A tibble: 3 x 2
# Groups: cyl [3]
# cyl mod
# <dbl> <list>
#1 6 <lm>
#2 4 <lm>
#3 8 <lm>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.