dplyr:计算组权重

Dan*_*ian 3 r dplyr

快速提问,如何使用dplyr

例如,给定数据:

D = data.frame(cat=rep(LETTERS[1:2], each=2), val=1:4)

#   cat val
# 1   A   1
# 2   A   2
# 3   B   3
# 4   B   4
Run Code Online (Sandbox Code Playgroud)

期望的结果应该是:

#   cat weight
# 1   A    0.3     # (1+2)/10
# 2   B    0.7     # (3+4)/10
Run Code Online (Sandbox Code Playgroud)

还有什么比以下更简洁?

D %>% 
  mutate(total=sum(val)) %>% 
  group_by(cat) %>% 
  summarise(weight=sum(val/total))
Run Code Online (Sandbox Code Playgroud)

had*_*ley 8

我把它写成

D <- data.frame(
  cat = rep(LETTERS[1:2], each = 2), 
  val = 1:4
)

D %>% 
  group_by(cat) %>%
  summarise(val = sum(val)) %>%
  mutate(weight =  val / sum(val))
Run Code Online (Sandbox Code Playgroud)

你可以简化一点count()(只在dplyr> = 0.3)和prop.table():

D %>% 
  count(cat, wt = val) %>%
  mutate(weight = prop.table(n))
Run Code Online (Sandbox Code Playgroud)