给定一个 data_frame df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N'))
,我需要想出一个 data_frame 告诉我们 50% 的A
's 是M
50% 的A
's 是N
67% 的B
's 是M
33% 的B
s 是N
。
我有一个小程序,我用来做这件事,但它看起来很可怕。
library(tidyverse)
df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N'))
# here we go...
df %>%
group_by(X) %>%
mutate(n_X = n()) %>%
group_by(X, Y) %>%
summarise(PERCENT = n() / first(n_X))
哪个输出,
Source: local data frame [4 x 3]
Groups: X [?]
X Y PERCENT
<chr> <chr> <dbl>
1 A M 0.5000000
2 A N 0.5000000
3 B M 0.6666667
4 B N 0.3333333
没有更好的方法来做到这一点吗?我肯定错过了一些东西。