按组计算多个二元变量的频率/百分比,使用dplyr。

5

我正在尝试获取一个表格,该表格将按组变量显示几个二元变量的百分比。以下是我拥有的数据示例和尝试过的内容。

var1 <- c(0,1,0, 0, 1, 0, 1, 0)
var2 <- c(1, 0, 0, 1, 0, 1, 0, 0)
var3 <- c(0, 0, 0, 1,1,0, 0, 0)
gender <- c("female", "male", "female", "male", "male", "male", "female", "male")
other <- c(1, 4, 5, 1, 2, 2, 3, 5)

data<- cbind(var1, var2, var3, gender, other) %>% as.data.frame()



data %>%
  group_by(gender) %>%
  summarise (n = n()) %>%
  mutate(freq = n / sum(n))

这是代码返回的结果。
# A tibble: 2 x 3
  gender     n  freq
  <fct>  <int> <dbl>
1 female     3 0.375
2 male       5 0.625

我想看到的是每个变量中回答1的受访者在性别上的比例(数字只是示例,因为我不知道实际数字,这就是我想找出的内容)。

  gender     n total   freqvar1  freqvar2  freqvar3  
1 female     3        0.375       0.456     0.300
2 male       5        0.625       0.544     0.700

非常感谢您的所有帮助!
1个回答

3
在按“gender”分组后,使用 n() 获取“total”,然后使用 across 循环遍历“var”变量,在逻辑vector上获取mean
library(dplyr) # 1.0.0
data %>% 
   group_by(gender) %>% 
       summarise(total = n(), 
            across(starts_with('var'), ~ mean(. == 1)))

实际上,在尝试过后,我有另一个问题 - 如何使此代码更通用并适用于因子变量?即:1)如何在管道中运行函数以跨越我选择的所有变量,而不是仅限于以特定字符串开头的所有变量?2)如果变量不是二进制的而是具有多个类别,那么相当于平均函数的是什么? - ievasieva
1
如果您想要所有变量,而不是使用 starts_with,则请指定 across(everything(), ~ mean(.))。我假设这些是数值列?@ievasieva - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接