我的数据集如下
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
答案 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