【发布时间】:2014-09-29 15:00:08
【问题描述】:
快速提问,如何使用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
期望的结果应该是:
# cat weight
# 1 A 0.3 # (1+2)/10
# 2 B 0.7 # (3+4)/10
还有比以下更简洁的吗?
D %>%
mutate(total=sum(val)) %>%
group_by(cat) %>%
summarise(weight=sum(val/total))
【问题讨论】:
-
试试
D%>%group_by(cat) %>% summarise(weight=sum(val)/sum(D[,2]))但不如你的代码优雅 -
跳过“dplyr”并使用base?
prop.table(xtabs(val ~ cat, D)) -
哎呀,刚刚发生了什么,@AnandaMahto!有趣
-
@DanielKrizian,如果你喜欢“data.table”,你也可以试试:
as.data.table(D)[, list(val = sum(val)/sum(D$val)), by = cat]。