r - 有没有办法对一列中的变量进行分组并在第二列中获取另一个变量的比率?
问题描述
我有一个数据集,其中有一group
列和另一列cyl
只有两个值。我想计算 中cyl
每个组的其中一个值的比例group
。
我可以在涉及创建新数据集和使用的多个步骤中执行此操作,full_join
但是我想知道是否有更有效的方法来执行此操作,因为我使用的数据集很大。
library(dplyr)
dat <- mtcars %>% filter(cyl >=6)
dat$group <- seq(1:3)
cyl_6 <- dat %>% filter(cyl == 6) %>% group_by(group) %>%
summarise(count_6 = n())
cyl_8 <- dat %>% filter(cyl == 8) %>% group_by(group) %>%
summarise(count_8 =n())
cyl_data <- cyl_6 %>% full_join(cyl_8) %>%
mutate(six_cyl_prop = count_6/(count_6 + count_8))
cyl_data
group six_cyl_prop
1 0.286
2 0.571
3 0.143
解决方案
计算满足条件的行数的基本方法是sum()
条件 -TRUE
计为 1,FALSE
counts 为 0。类似地,要获得满足条件的行的比例,您可以采用该mean()
条件:
dat %>%
group_by(group) %>%
summarize(six_cyl_prop = mean(cyl == 6))
# # A tibble: 3 × 2
# group six_cyl_prop
# <int> <dbl>
# 1 1 0.286
# 2 2 0.571
# 3 3 0.143
推荐阅读
- node.js - 是否可以将 aws 代码管道转换为 bitbucket 管道?
- qt - 我在 Qt 中创建了动态 n*n LineEdit?
- android - 有没有办法查看手机上次进入省电模式的时间?
- jquery - jQuery 函数未使用新参数执行
- python - 带环顾和替换的正则表达式
- python - 将python列表划分为列表的子集(子集的数量越少越好),每个列表的总和小于K
- javascript - 用 JQuery 加载的内容需要表单提交以重新加载父项中的内容
- javascript - 为什么我在 Vue.js Storybook 中的“数据”参数没有覆盖组件的数据?
- google-app-engine - 为我的 API 生成 Open API 时出错
- three.js - TREE.JS / GLSL 如何将着色器大小与世界坐标匹配?