我有一个数据框架,其中每个ID都属于一个唯一的组。我希望创建一个汇总表,它告诉我每个id的观察数量以及它属于哪个组。
dat=data.frame(id=c(1,1,1,2,2,2,2,3,4,4,4,4,4),group=c(1,1,1,0,0,0,0,1,0,0,0,0,0))
count=dat%>% group_by(id)%>% tally()
## A tibble: 4 x 2
id n
<dbl> <int>
1 1 3
2 2 4
3 3 1
4 4 5有了上面的代码,我可以计算观察的数量。但我不知道如何为组创建第三列。预期的结果是:
# A tibble: 4 x 3
id n group
<dbl> <int> <dbl>
1 1 3 1
2 2 4 0
3 3 1 1
4 4 5 0当我这么做
dat %>% group_by(id) %>% summarise(n=count(id), group = unique(group))我遇到了一个错误:.datanames(Cols):== 1中的错误,但是,当我这样做的时候,==1就不正确了。
dat %>% group_by(id) %>% summarise( group = unique(group))啊,真灵。我很困惑,为什么汇总命令不能接受多个参数。更新:错误是由另一个名为“plyr”的包引起的。当我分开的时候,总结是很好的。
发布于 2019-07-18 14:12:16
akrun's answer更优雅,但作为一种替代方法,您可以简单地将group变量添加到group_by()调用中:
library(dplyr)
dat <- tibble(id = c(1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4),
group = c(1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0))
dat %>%
group_by(id, group) %>%
tally()
# A tibble: 4 x 3
# Groups: id [4]
id group n
<dbl> <dbl> <int>
1 1 1 3
2 2 0 4
3 3 1 1
4 4 0 5注意,如果您的id和group与您的示例(id =1 -> group = 1,id =2 -> group = 0等)不一样,那么它将为每个组合生成一行(这显然非常有用)。例如,
dat2 <- tibble(id = c(1, 1, 1, 2, 2), group = c(1, 0, 0, 1, 0))
dat2 %>%
group_by(id, group) %>%
tally()
# A tibble: 4 x 3
# Groups: id [2]
id group n
<dbl> <dbl> <int>
1 1 0 2
2 1 1 1
3 2 0 1
4 2 1 1发布于 2019-07-18 13:40:16
我们可以使用count
library(dplyr)
dat %>%
count(id, group)
# A tibble: 4 x 3
# id group n
# <dbl> <dbl> <int>
#1 1 1 3
#2 2 0 4
#3 3 1 1
#4 4 0 5https://stackoverflow.com/questions/57095885
复制相似问题