簡體   English   中英

dplyr 中 summarise() 函數的替代方法

[英]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)))

dplyrdevel版本中,可以使用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]>

或者使用mutatemap

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM