【发布时间】:2017-06-08 20:39:54
【问题描述】:
给定一个data_frame df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N')),我需要想出一个data_frame,它告诉我们A 的50% 是M,A 的50% 是N,67% B 的 M,B 的 33% 是 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
没有更好的方法吗?我肯定错过了什么。
【问题讨论】: