首页 文章

通过dplyr group_by运行列表并每次汇总和变异

提问于
浏览
1

使用dplyr时,是否可以循环遍历列表并替换group_by变量?让我说明一下:

假设我有一个来自数据集myData的变量列表,每个变量都有相同的组1到10.理想情况下,我想循环遍历列表,并对每个变量进行汇总和变异,如下所示 . 这可能吗?

这是一个较小的通用示例,但我只是将变量a放在group_by函数中,但理想情况下我想循环遍历列表并获取每个变量的输出 .

vars <- list(a,b,c)

> myData
   success a b c
1        0 2 1 3
2        1 1 3 1
3        1 1 3 1
4        0 1 1 3
5        1 2 2 1
6        1 2 3 2
7        0 2 2 3
8        0 1 1 3
9        0 2 3 2
10       1 1 1 2
11       1 1 2 2
12       0 1 1 1
13       0 3 1 1
14       1 3 2 1

> myData %>% group_by(a) %>% 
+     summarise(success = sum(success), n = n()) %>% 
+     mutate(success_prop = success / sum(n))
Source: local data frame [3 x 4]

  a success n success_prop
1 1       4 7   0.28571429
2 2       2 5   0.14285714
3 3       1 2   0.07142857

最终结果可能如下所示:

group   a.success   a.n a.success_prop  b.success   b.n b.success_prop  c.success   c.n c.success_prop
1         4          7  0.28571429          1        6  0.07142857          4         6   0.2857143
2         2          5  0.14285714          3        4  0.21428571          3         4   0.2142857
3         1          2  0.07142857          3        4  0.21428571          0         4   0

1 回答

  • 3

    我建议您以tidy格式转换数据作为第一步:

    library(tidyr)
    library(dplyr)
    
    tidy_data <- myData %>%
      gather(key, value, a:c)
    

    然后直接使用 group_bysummarise .

    Edit

    tidy_data %>%
      group_by(key, value) %>%
      summarise(
        success = sum(success),
        n = n()
      ) %>%
      group_by(key) %>%
      mutate(
        success_prop = success / sum(n)
      )
    

相关问题