r - Transmute 有效,但 mutate 无效
问题描述
我有下面的数据集以及此处未显示的其他列:
v0102 v0103 child.below14 child.above14
1 31000010 1 0 0
2 31000010 1 0 0
3 31000010 1 1 0
4 31000010 1 1 0
5 31605621 1 0 0
6 31605621 1 1 0
7 31605621 1 1 0
8 31605877 1 0 0
9 31605877 1 1 0
我想按前两列分组并计算 14 岁以下和以上儿童的数量。当我尝试使用 transmute 时,我得到了预期的答案:
df.pnad.mg %>% group_by(v0102, v0103) %>% transmute(children.below14 = sum(child.below14), children.above14 = sum(child.above14))
v0102 v0103 children.below14 children.above14
1 31000010 1 3 0
2 31000010 1 3 0
3 31000010 1 3 0
4 31000010 1 3 0
5 31605621 1 2 0
6 31605621 1 2 0
7 31605621 1 2 0
8 31605621 1 2 0
9 31605877 1 1 0
但是,当我从 transmute 切换到 mutate 时,输出似乎忽略了 group_by() 动词:
df.pnad.mg %>% group_by(v0102, v0103) %>% mutate(children.below14 = sum(child.below14), children.above14 = sum(child.above14))
v0102 v0103 children.below14 children.above14
1 31000010 1 8092 7949
2 31000010 1 8092 7949
3 31000010 1 8092 7949
4 31000010 1 8092 7949
5 31000010 1 8092 7949
6 31605621 1 8092 7949
7 31605621 1 8092 7949
8 31605621 1 8092 7949
9 31605877 1 8092 7949
我错过了什么吗?
解决方案
你想要的功能summarize
不是mutate
。
df.pnad.mg %>%
group_by(v0102, v0103) %>%
summarize(children.below14 = sum(child.below14),
children.above14 = sum(child.above14))
当您使用mutate
它时,它会计算总和,但它会保留所有行。
使用九行数据,这是我得到的输出:
`summarise()` regrouping output by 'v0102' (override with `.groups` argument)
# A tibble: 3 x 4
# Groups: v0102 [3]
v0102 v0103 children.below14 children.above14
<dbl> <dbl> <dbl> <dbl>
1 31000010 1 2 0
2 31605621 1 2 0
3 31605877 1 1 0
如果您希望保留所有行,那么mutate
应该可以。我无法在dplyr 1.0.2
. 这是我的输出mutate
:
df.pnad.mg %>%
group_by(v0102, v0103) %>%
mutate(children.below14 = sum(child.below14),
children.above14 = sum(child.above14))
# A tibble: 9 x 6
# Groups: v0102, v0103 [3]
v0102 v0103 child.below14 child.above14 children.below14 children.above14
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 31000010 1 0 0 2 0
2 31000010 1 0 0 2 0
3 31000010 1 1 0 2 0
4 31000010 1 1 0 2 0
5 31605621 1 0 0 2 0
6 31605621 1 1 0 2 0
7 31605621 1 1 0 2 0
8 31605877 1 0 0 1 0
9 31605877 1 1 0 1 0
如果您想创建这些新列并删除旧列,那么transmute
您就是这样做的。
推荐阅读
- jquery - Dropzone jquery - 始终使用 GET 请求,事件设置为 POST
- angular - 使用 angular5 在验证中未收到错误消息
- assembly - IAR 汇编器指令 IF
- python - 在 Python 2.7.1 中创建 unicode XML 文件
- javascript - 当用户完成输入时运行 JS 代码
- asp.net-mvc - ASP.NET MVC 5,在 Session 中存储列表值
- node.js - Firebase 云功能脚本未运行
- android - Apache Cordova 在 div 中加载外部 URL 或网站
- javascript - ajax 请求上的“预检响应无效(重定向)”错误是什么?
- android - Idea android sdk设置