我一直试图对数据帧进行一些计数.要点是按一个变量分组,然后根据第二个变量进一步分组.从这里我想计算每个组的子组的大小.示例代码是这样的:
set.seed(123456)
df <- data.frame(User = c(rep("A", 5), rep("B", 4), rep("C", 6)),
Rank = c(rpois(5,1), rpois(4,2), rpois(6,3)))
#This results in an error
df %>% group_by(User) %>% group_by(Rank) %>% summarize(Res = n_groups())
Run Code Online (Sandbox Code Playgroud)
所以我想要的是"用户A"有3个,"用户B"有4个,"用户C"有5个.换句话说,数据帧df最终看起来像:
User Rank Result
1 A 2 3
2 A 2 3
3 A 1 3
4 A 0 3
5 A 0 3
6 B 1 4
7 B 2 4
8 B 0 4
9 B 6 4
10 C 1 5
11 C 4 5
12 C 3 5
13 C 5 5
14 C 5 5
15 C 8 5
Run Code Online (Sandbox Code Playgroud)
我还在学习dplyr,所以我不确定应该怎么做.怎么能实现这一目标?非dplyr答案也非常受欢迎.提前致谢!
试试这个:
df %>% group_by(User) %>% mutate(Result=length(unique(Rank)))
Run Code Online (Sandbox Code Playgroud)
或者(见下面的评论):
df %>% group_by(User) %>% mutate(Result=n_distinct(Rank))
Run Code Online (Sandbox Code Playgroud)