如何汇总变量中的分类变量

时间:2019-05-20 21:35:02

标签: r dataframe aggregate

我的数据集如下

df<-read.table(text="group, race
               1, 1
               1, 1
               1, 4
               2, 1
               2, 3
               2, 4
               3, 1
               2, 1
               1, 1", header=T, sep=",")

我想按组得出每个种族的总数。我尝试使用聚合函数,但无济于事

我希望输出看起来像这样:

group   race   total
1       1      2
1       4      1
2       1      2
.
.
.
3       1      1

3 个答案:

答案 0 :(得分:2)

可以使用aggregate()在后​​台完成

with(df, aggregate(list(count=race), by=list(group=group,race=race), FUN=length))

#>   group race count
#> 1     1    1     3
#> 2     2    1     2
#> 3     3    1     1
#> 4     2    3     1
#> 5     1    4     1
#> 6     2    4     1

或使用ave()(如果您想保留数据结构并仅添加列total):

df$total <- ave(df$race, df[,c("group","race")], FUN=length)

#>   group race total
#> 1     1    1     3
#> 2     1    1     3
#> 3     1    4     1
#> 4     2    1     2
#> 5     2    3     1
#> 6     2    4     1
#> 7     3    1     1
#> 8     2    1     2
#> 9     1    1     3

答案 1 :(得分:0)

library(tidyverse)

df<-tribble(~"group", ~"race",
               1, 1,
               1, 1,
               1, 4,
               2, 1,
               2, 3,
               2, 4,
               3, 1,
               2, 1,
               1, 1)
df %>% 
    count(group, race)
#> # A tibble: 6 x 3
#>   group  race     n
#>   <dbl> <dbl> <int>
#> 1     1     1     3
#> 2     1     4     1
#> 3     2     1     2
#> 4     2     3     1
#> 5     2     4     1
#> 6     3     1     1

reprex package(v0.2.1)于2019-05-20创建

答案 2 :(得分:0)

类似于dylanjm,但逻辑略有不同:

df %>%
group_by(group, race) %>%
summarise(Total = length(race))

得到相同的结果:

# A tibble: 6 x 3
# Groups:   group [?]
  group  race Total
  <int> <int> <int>
1     1     1     3
2     1     4     1
3     2     1     2
4     2     3     1
5     2     4     1
6     3     1     1
相关问题