如何获得基于两列的频率计数总和?

时间:2018-09-16 01:06:14

标签: r

假定数据帧存储为someData,并且格式如下:

ID                Team                Games                Medal
1                 Australia           1992 Summer          NA
2                 Australia           1994 Summer          Gold
3                 Australia           1992 Summer          Silver
4                 United States       1991 Winter          Gold
5                 United States       1992 Summer          Bronze
6                 Singapore           1991 Summer          NA

如何根据团队计算奖牌的频率-同时排除NA作为变量。但是同时,应该汇总每个国家/地区的总频率,而不是分别为GoldSilverBronze显示。

换句话说,我正在尝试显示每个国家/地区的总数奖牌数量,NA除外。

我尝试过这样的事情:

library(plyr)
counts <- ddply(olympics, .(olympics$Team, olympics$Medal), nrow)
names(counts) <- c("Country", "Medal", "Freq")
counts

但这只是给我一张单独列出每个国家(包括NA)的每枚奖牌的庞大表格。

我想做的是以下事情:

Australia            2
United States        2

任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

我们可以使用count

library(dplyr)
df1 %>% 
  filter(!is.na(Medal)) %>%
  count(Team)
# A tibble: 2 x 2
#  Team              n
#  <fct>         <int>
#1 Australia         2
#2 United States     2

答案 1 :(得分:0)

您可以使用tablecolSums在基数R中做到这一点

colSums(table(someData$Medal, someData$Team))
    Australia     Singapore United States 
            2             0             2

数据

someData = read.table(text="ID        Team        Games         Medal
1                 Australia           '1992 Summer'          NA
2                 Australia           '1994 Summer'          Gold
3                 Australia           '1992 Summer'          Silver
4                 'United States'     '1991 Winter'          Gold
5                 'United States'     '1992 Summer'          Bronze
6                 Singapore           '1991 Summer'          NA",
header=TRUE)