Base R 代替 dplyr:对数据进行分组和汇总?

问题描述 投票:0回答:2

该数据集可在 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 列的表格(性别、季节、参加的运动项目数)。 注:进行的运动项目数是指进行的独特运动项目的总数,例如: 性别:男/季节:夏季/运动:男性在夏季比赛中进行的独特运动项目的数量。

r
2个回答
7
投票

执行此操作的一种方法是使用

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

2
投票

是的。 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
更简洁。

© www.soinside.com 2019 - 2024. All rights reserved.