簡體   English   中英

如何按R中的兩個以上因素對數據進行分組

[英]how to group data by more than two factors in R

我有一個如下所示的數據集。 在實際數據集中,有8619行。

Athlete      Competing Country  Year    Total Medals
Michael Phelps    United States 2012    6
Alicia Coutts     Australia     2012    5
Missy Franklin    United States 2012    5
Brian Leetch      United States 2002    1
Mario Lemieux     Canada        2002    1
Ylva Lindberg     Sweden        2002    1
Eric Lindros      Canada        2002    1
Ulrica Lindström  Sweden        2002    1
Shelley Looney    United States 2002    1

我想按國家/地區,年份和獎牌總數重新排列這些數據。

我想要結果

Country        Year  SumOfMedals
United States  2012  11
United States  2002   2
...

by(newmd$Total.Medals, newmd$Year, FUN=sum)
by(md$Total.Medals, md$Competing.Country, FUN=sum)

我厭倦了通過爭論使用,但仍然堅持。 你們有人可以幫助我嗎?

或者使用data.table ,我們將'data.frame'轉換為'data.table'( setDT(df1) ),按'Competing_Country','Year'分組,通過變量得到'Total_Medals and then命令`的sum出於興趣。

library(data.table)
setDT(df1)[,list(SumOfMedals = sum(Total_Medals)), 
   by = .(Competing_Country, Year)
        ][order(-Competing_Country, -Year, -SumOfMedals)]

或者使用dplyr ,我們使用相同的方法。

library(dplyr)
df1 %>%
    group_by(Competing_Country, Year) %>%
    summary(SumOfMedals = sum(Total_Medals) %>%
    arrange(desc(Competing_Country), desc(Year), desc(SumOfMedals))

數據

 df1 <- structure(list(Athlete = c("Michael Phelps", "Alicia Coutts", 
"Missy Franklin", "Brian Leetch", "Mario Lemieux", "Ylva Lindberg", 
"Eric Lindros", "Ulrica Lindström", "Shelley Looney"), Competing_Country = c("United States", 
"Australia", "United States", "United States", "Canada", "Sweden", 
"Canada", "Sweden", "United States"), Year = c(2012L, 2012L, 
2012L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L), Total_Medals = c(6L, 
5L, 5L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("Athlete", "Competing_Country", 
"Year", "Total_Medals"), class = "data.frame", row.names = c(NA, 
-9L))

你可以使用aggregate很容易地做到這一點,以獲得獎牌數量的總和:

md2 <- aggregate(cbind(SumOfMedals = Total.Medals) ~ Competing.Country + Year),
          data = md,
          FUN = sum)

下一步是通過Competing.CountrySumOfMedalsmd2進行排序,這是使用order函數完成的:

md2 <- md2[order(Competing.Country, -SumOfMedals),] 

全部完成。

暫無
暫無

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

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