运行 通过 dplyr group_by 的列表,每次都总结和变异
running a list through dplyr group_by and summarising & mutating each time
是否可以在使用 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
我建议首先将您的数据转换为 tidy 格式:
library(tidyr)
library(dplyr)
tidy_data <- myData %>%
gather(key, value, a:c)
然后直接使用group_by
和summarise
。
编辑
tidy_data %>%
group_by(key, value) %>%
summarise(
success = sum(success),
n = n()
) %>%
group_by(key) %>%
mutate(
success_prop = success / sum(n)
)
是否可以在使用 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
我建议首先将您的数据转换为 tidy 格式:
library(tidyr)
library(dplyr)
tidy_data <- myData %>%
gather(key, value, a:c)
然后直接使用group_by
和summarise
。
编辑
tidy_data %>%
group_by(key, value) %>%
summarise(
success = sum(success),
n = n()
) %>%
group_by(key) %>%
mutate(
success_prop = success / sum(n)
)