在 R 中自动分组和汇总
Automate Grouping & Summarisation in R
我正在寻找有关如何自动执行大量分组和汇总任务的建议。
我对 4 列进行 dplyr 分组,然后根据它总结第五列。我分组的 4 列名称有 936 种组合。这意味着我需要执行分组和汇总 936 次。
数据框:
mydata <- read.table(header=TRUE, text="
type from to name price
a abc xyz new 10
a abc xyz new 15
a abc xyz new 11
a abc xyz new 12
a abc xyz new 10
a efg hce old 13
a efg hce old 14
a efg hce old 15
b abc hce old 18
b abc hce old 19
b abc hce old 25
b abc ijk new 20
b abc ijk new 25
b efg ijk old 12
b efg ijk old 18
b efg ijk old 14
b efg ijk old 12
b efg lmn old 13
b efg lmn old 18
b efg lmn old 19
b efg lmn old 19
")
分组汇总:
file_1 <- mydata %>% filter(type=="a" & from=="abc" & to=="xyz" & name="new") %>% group_by(price) %>% summarise(price=median(price), n=n())
.....
file_n <- mydata %>% filter(type=="b" & from=="efg" & to=="lmn" & name="old") %>% group_by(price) %>% summarise(price=median(price), n=n())
输出file_1包含2个变量:1.所有价格,2.相应价格的出现次数:
head(file_1)
前4个变量名组合个数,输出文件个数:
n_combinations <- mydata %>% group_by(type, from, to, name) %>% summarise(n=n())
dim(n_combinations)[1]
真实文件中每个组合有数百种不同的价格。
我知道创建 936 个输出文件是不切实际的,但我想知道您将如何处理这样的任务。我正在考虑使用最多 100 种组合的样本进行分析。
非常感谢!
在我看来
mydata %>%
group_by(type, from, to, name) %>%
summarise(price=median(price), .groups="drop")
# A tibble: 6 x 5
type from to name price
<fct> <fct> <fct> <fct> <dbl>
1 a abc xyz new 11
2 a efg hce old 13.5
3 b abc hce old 18
4 b abc ijk new 20
5 b efg ijk old 12
6 b efg lmn old 13
做你想做的事,并且对 type
、from
和 name
的新组合很稳健。如果您不想要所有可能的组合,您可以只过滤结果数据集。
欢迎来到 SO,做得很好,因为它生成了比大多数新用户管理的更简单的 self-contained 最小工作示例!
我正在寻找有关如何自动执行大量分组和汇总任务的建议。
我对 4 列进行 dplyr 分组,然后根据它总结第五列。我分组的 4 列名称有 936 种组合。这意味着我需要执行分组和汇总 936 次。
数据框:
mydata <- read.table(header=TRUE, text="
type from to name price
a abc xyz new 10
a abc xyz new 15
a abc xyz new 11
a abc xyz new 12
a abc xyz new 10
a efg hce old 13
a efg hce old 14
a efg hce old 15
b abc hce old 18
b abc hce old 19
b abc hce old 25
b abc ijk new 20
b abc ijk new 25
b efg ijk old 12
b efg ijk old 18
b efg ijk old 14
b efg ijk old 12
b efg lmn old 13
b efg lmn old 18
b efg lmn old 19
b efg lmn old 19
")
分组汇总:
file_1 <- mydata %>% filter(type=="a" & from=="abc" & to=="xyz" & name="new") %>% group_by(price) %>% summarise(price=median(price), n=n())
.....
file_n <- mydata %>% filter(type=="b" & from=="efg" & to=="lmn" & name="old") %>% group_by(price) %>% summarise(price=median(price), n=n())
输出file_1包含2个变量:1.所有价格,2.相应价格的出现次数:
head(file_1)
前4个变量名组合个数,输出文件个数:
n_combinations <- mydata %>% group_by(type, from, to, name) %>% summarise(n=n())
dim(n_combinations)[1]
真实文件中每个组合有数百种不同的价格。
我知道创建 936 个输出文件是不切实际的,但我想知道您将如何处理这样的任务。我正在考虑使用最多 100 种组合的样本进行分析。
非常感谢!
在我看来
mydata %>%
group_by(type, from, to, name) %>%
summarise(price=median(price), .groups="drop")
# A tibble: 6 x 5
type from to name price
<fct> <fct> <fct> <fct> <dbl>
1 a abc xyz new 11
2 a efg hce old 13.5
3 b abc hce old 18
4 b abc ijk new 20
5 b efg ijk old 12
6 b efg lmn old 13
做你想做的事,并且对 type
、from
和 name
的新组合很稳健。如果您不想要所有可能的组合,您可以只过滤结果数据集。
欢迎来到 SO,做得很好,因为它生成了比大多数新用户管理的更简单的 self-contained 最小工作示例!