gpt4 book ai didi

r - 获取两列中表示的所有类别组合的摘要数据框

转载 作者:行者123 更新时间:2023-12-02 00:37:05 28 4
gpt4 key购买 nike

我正在使用与以下示例相对应的数据框:

set.seed(1)
dta <- data.frame("CatA" = rep(c("A","B","C"), 4), "CatNum" = rep(1:2,6),
"SomeVal" = runif(12))

我想快速构建一个数据框,其中包含从 CatACatNum 派生的所有类别组合以及类别的总和值分别从每一列导出。在上面的原始示例中,对于前几个组合,可以使用简单的代码来实现:

df_sums <- data.frame(
"Category" = c("Total for A",
"Total for A and 1",
"Total for A and 2"),
"Sum" = c(sum(dta$SomeVal[dta$CatA == 'A']),
sum(dta$SomeVal[dta$CatA == 'A' & dta$CatNum == 1]),
sum(dta$SomeVal[dta$CatA == 'A' & dta$CatNum == 2]))
)

这会产生信息丰富的总和数据框架:

           Category       Sum
1 Total for A 2.1801780
2 Total for A and 1 1.2101839
3 Total for A and 2 0.9699941

当应用于具有多个类别的数据框时,该解决方案效率非常低。我希望实现以下目标:

  1. 循环浏览所有类别,包括分别从每列以及同时从两列派生的类别
  2. 在如何应用函数方面实现一定的灵活性,例如我可能想应用 mean 而不是 sum
  3. 总计字符串保存为一个单独的对象,当应用sum以外的其他函数时,我可以轻松编辑该对象。

我最初考虑使用dplyr,如下:

require(dplyr)
df_sums_experiment <- dta %>%
group_by(CatA, CatNum) %>%
summarise(TotVal = sum(SomeVal))

但我不清楚如何同时应用多个分组。如前所述,我感兴趣的是按每列单独分组以及按两列组合进行分组。我还想创建一个字符串列来指示组合内容以及组合顺序。

最佳答案

您可以使用tidyr合并列并收集数据。然后用dplyr总结一下:

library(dplyr)
library(tidyr)
dta %>% unite(measurevar, CatA, CatNum, remove=FALSE) %>%
gather(key, val, -SomeVal) %>%
group_by(val) %>%
summarise(sum(SomeVal))

val sum(SomeVal)
(chr) (dbl)
1 1 2.8198078
2 2 3.0778622
3 A 2.1801780
4 A_1 1.2101839
5 A_2 0.9699941
6 B 1.4405782
7 B_1 0.4076565
8 B_2 1.0329217
9 C 2.2769138
10 C_1 1.2019674
11 C_2 1.0749464

关于r - 获取两列中表示的所有类别组合的摘要数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com