r - 数学运算对每个类别的两列进行分组总和
问题描述
我尝试根据来自两个不同列的值按组计算百分比。
我使用 dplyr 对数据进行分组,然后进行数学运算。我输入命令是错误的,因为所有组的结果都相同,我想我的代码只显示一个总百分比,而不是按组显示。
> x <- data.frame("code"=c("a","a","b","b","a","b"),"home" = c(1,1,1,1,1,1),
+ "trap" = c(0,1,0,1,0,1))
> x
code home trap
1 a 1 0
2 a 1 1
3 b 1 0
4 b 1 1
5 a 1 0
6 b 1 1
> x %>%
+ group_by(code) %>%
+ mutate(perc=(sum(trap)/sum(home)))
# A tibble: 6 x 4
# Groups: code [2]
code home trap perc
<fct> <dbl> <dbl> <dbl>
1 a 1 0 0.5
2 a 1 1 0.5
3 b 1 0 0.5
4 b 1 1 0.5
5 a 1 0 0.5
6 b 1 1 0.5
>
这个想法是获得关于家庭的陷阱的权重(在同一组的所有行中应该是相同的)
我想得到这个数据框:
code home trap perc
<fct> <dbl> <dbl> <dbl>
1 a 1 0 0.333
2 a 1 1 0.333
3 b 1 0 0.666
4 b 1 1 0.666
5 a 1 0 0.333
6 b 1 1 0.666
>
解决方案
我们只需要mean
x %>%
group_by(code) %>%
dplyr::mutate(perc = mean(trap))
# A tibble: 6 x 4
# Groups: code [2]
# code home trap perc
# <fct> <dbl> <dbl> <dbl>
#1 a 1 0 0.333
#2 a 1 1 0.333
#3 b 1 0 0.667
#4 b 1 1 0.667
#5 a 1 0 0.333
#6 b 1 1 0.667
不同的值可能是由于summarise
被掩蔽plyr::summarise
而不是dplyr::summarise
(当两个包都加载到全局环境中时)。要解决此问题,请指定dplyr::
或启动仅dplyr
加载的新会话
x %>%
group_by(code) %>%
dplyr::mutate(perc = sum(trap)/sum(home))
推荐阅读
- c++ - 在 Nginx 中使用 C++ 代码的方法是什么?
- oop - golang中低级模块和高级模块如何通信
- node.js - 使用 kafka-node 在 javascript 中轮询 kafka 消费者
- python - 在except中打印字符串时出现问题?程序只是结束而不是打印语句
- performance - Jmeter - 为每次迭代的每个线程从 csv 中提取不同的行
- bert-language-model - 从针对特定领域数据的微调 BERT 识别并获得正确的嵌入
- node.js - 生产中的 Puppeteer 504 网关超时错误
- python - 如何在 cmd 的帮助下阅读 python 函数指南的文档字符串?
- firebase - Firestore 云数据库是否适合特定查询?
- reactjs - 服务器响应后如何创建 cookie?反应