首页 > 解决方案 > 有没有办法对一列中的变量进行分组并在第二列中获取另一个变量的比率?

问题描述

我有一个数据集,其中有一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

标签: rdplyr

解决方案


计算满足条件的行数的基本方法是sum()条件 -TRUE计为 1,FALSEcounts 为 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

推荐阅读