以R为基数而不是dplyr:对数据进行分组和汇总?

时间:2019-05-07 14:04:55

标签: r

数据集可在Kaggle上找到:https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results/

我想知道我们是否可以使用Base R创建一个对象,该对象针对性别和季节的每种组合都包含数据集中不同运动项的数量?

我已经为此使用了dplyr软件包,并且可以正常工作:

data %>% 
group_by(Sex, Season) %>% 
summarise(num_sports_played = length(unique(Sport)))

但是我想知道是否也可以使用基数R。结果应该是一个4行3列的表格(性别,季节,参加的运动次数)。 注意:运动项目数是指独特运动项目的总数,例如: 性别:男/季节:夏/运动:男性在夏季运动会中从事的独特运动次数。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用aggregate。我认为,这是最简单的base方法。您也可以使用其他功能,但这是最容易遵循的功能。

aggregate(Sport ~ Sex + Season, data = data, 
          FUN = function(x) length(unique(x)) )
  Sex Season Sport
1   F Summer    40
2   M Summer    49
3   F Winter    14
4   M Winter    17

答案 1 :(得分:0)

是的。 Base R可以执行以下操作:

answer <- aggregate(formula = Sport ~ Sex + Season,
                    data = data,
                    FUN = length)

但是,在使用分组操作时,我建议在所有其他库(甚至是data.table)上使用dplyrdata.table的实现方式是:

data[, nrow(), by = list(Sex, Season)]

我发现data.tablepandasdata.framedplyr更为简洁。