我希望能够使用不同的分组变量对数据框进行汇总。例如,我有三个变量(x1、x2、x3),我想按照 x1 进行分组,并获取该组中观测数量,同时也想对 x2 和 x3 做同样的操作。
我希望通过同一段管道代码来实现这一点,但目前我唯一想到的解决方法是保存每个想要分组的单独输出结果。
要重现我的数据框,请参考以下内容:
我希望通过同一段管道代码来实现这一点,但目前我唯一想到的解决方法是保存每个想要分组的单独输出结果。
要重现我的数据框,请参考以下内容:
x1 <- c(0,1,1,2,2,3,3,3,4,4,5,6,6,7,8,9,9,10)
x2 <- c(0,0,1,1,0,1,2,0,0,2,1,0,3,4,2,3,0,3)
x3 <- c(0,1,0,1,2,2,1,3,4,2,4,6,3,3,6,6,9,7)
df <- data.frame(x1,x2,x3)
我的期望输出应该类似于这样,其中x是变量中的最小值和最大值,n_x1-3是在特定数字和使用该变量作为分组变量时的观察数量:
x n_x1 n_x2 n_x3
1 0 1 7 2
2 1 2 4 3
3 2 2 3 3
4 3 3 3 3
5 4 2 1 2
6 5 1 NA NA
7 6 2 NA 3
8 7 1 NA 1
9 8 1 NA NA
10 9 2 NA 1
11 10 1 NA NA
到目前为止,我已经想出了按每个变量单独汇总和分组,然后在最后一步将它们全部联合起来的方法。
x1_count <- df %>%
group_by(x1) %>%
summarise(n_x1=n())
x2_count <- df %>%
group_by(x2) %>%
summarise(n_x2=n())
x3_count <- df %>%
group_by(x3) %>%
summarise(n_x3=n())
all_count <- full_join(x1_count, x2_count,
by=c("x1"="x2")) %>%
full_join(., x3_count,
by=c("x1"="x3")) %>%
rename("x"="x1")
有没有一种方法可以避免输出多个数据框,然后再将它们联合在一起。我更喜欢一种更干净、更优雅的解决方案。