簡體   English   中英

使用dplyr進行多組匯總

[英]Using dplyr to summarize by multiple groups

我正在嘗試使用 dplyr 來總結基於 2 個組的數據集:“年”和“區域”。 這是數據集的樣子:

  Year   Area Num
1 2000 Area 1  99
2 2001 Area 3  85
3 2000 Area 1  60
4 2003 Area 2  90
5 2002 Area 1  40
6 2002 Area 3  30
7 2004 Area 4  10
...

最終結果應該是這個樣子:

  Year    Area Mean
1 2000 Area 1  100
2 2000 Area 2   80
3 2000 Area 3   89
4 2001 Area 1   80
5 2001 Area 2   85
6 2001 Area 3   59
7 2002 Area 1   90
8 2002 Area 2   88
... 

請原諒“平均值”的值,它們是虛構的。

示例數據集的代碼:

df <- structure(list(
   Year = c(2000, 2001, 2000, 2003, 2002, 2002, 2004), 
   Area = structure(c(1L, 3L, 1L, 2L, 1L, 3L, 4L), 
   .Label = c("Area 1", "Area 2", "Area 3", "Area 4"), 
   class = "factor"), 
   Num = structure(c(7L, 5L, 4L, 6L, 3L, 2L, 1L), 
   .Label = c("10", "30", "40", "60", "85", "90", "99"), 
   class = "factor")), 
   .Names = c("Year", "Area", "Num"), 
   class = "data.frame", row.names = c(NA, -7L))

df$Num <- as.numeric(df$Num)

我嘗試過的事情:

df.meanYear <- df %>%
  group_by(Year) %>%
  group_by(Area) %>%
  summarize_each(funs(mean(Num)))

但它只是用平均值代替每個值,而不是預期的結果。

如果可能,請提供替代方法(即非 dplyr)方法,因為我還是 R 的新手。

這是你想要的?

 library(dplyr)
 df <- group_by(df, Year, Area)
 df <- summarise(df, avg = mean(Num))

我們可以使用data.table

library(data.table)
setDT(df)[, .(avg = mean(Num)) , by = .(Year, Area)]

我的代碼中有類似的問題,我用.groups屬性修復了它:

df %>%
  group_by(Year,Area) %>%
  summarise(avg = mean(Num), .groups="keep")

還通過添加的示例進行了驗證( as.numeric損壞的Num值,所以我使用as.numeric(as.character(df$Num))來修復它):

   Year Area     avg
  <dbl> <fct>  <dbl>
1  2000 Area 1  79.5
2  2001 Area 3  85  
3  2002 Area 1  40  
4  2002 Area 3  30  
5  2003 Area 2  90  
6  2004 Area 4  10  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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