该数据集可在 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 列的表格(性别、季节、参加的运动项目数)。 注:进行的运动项目数是指进行的独特运动项目的总数,例如: 性别:男/季节:夏季/运动:男性在夏季比赛中进行的独特运动项目的数量。
执行此操作的一种方法是使用
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
是的。 Base R 能够做这些事情:
answer <- aggregate(formula = Sport ~ Sex + Season,
data = data,
FUN = length)
但是,在处理分组操作时,我推荐
data.table
胜过所有其他库(甚至 dplyr
)。 data.table
这样做的方法是:
data[, .N, by = .(Sex, Season)]
我发现
data.table
比pandas
、data.frame
和dplyr
更简洁。