给定一个data_frame df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N'))
,我需要拿出一个data_frame它告诉我们,50%A
的是M
,50%A
的是N
,67%B
的是M
,与33%B
的是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 PERCENT1 A M 0.5000000 2 A N 0.5000000 3 B M 0.6666667 4 B N 0.3333333
有没有更好的方法来做到这一点?当然我错过了什么.
你可以使用prop.table
:
df %>% group_by(X, Y) %>% count() %>% mutate(PERCENT = prop.table(n))
结果:
X Y n PERCENT1 A M 1 0.5000000 2 A N 1 0.5000000 3 B M 2 0.6666667 4 B N 1 0.3333333