【问题标题】:Create summary table with averages of column subsets使用列子集的平均值创建汇总表
【发布时间】:2022-01-24 08:27:56
【问题描述】:

我对此很陌生,所以请多多关照!

我的数据集有 3 列 - Col A (chr, 'X' and 'Y'), Col B (chr, 'red', 'blue' 'yellow'), Col C (numeric)。

Col_A <- c('X', 'X', 'X', 'Y', 'Y', 'X', 'Y', 'X')
Col_B <- c('red', 'yellow', 'blue', 'blue', 'yellow', 'red', 'blue', 'red')
Col_C <- c(12, 22, 13, 14, 25, 17, 11, 10)

dataset <- as.data.frame(cbind(Col_A, Col_B, Col_C))

如何在 R 中创建一个汇总表,类似于

tbl_summary(dataset, by = 'Col_A') 

但是给出 Col B 中每个子组的 Col C 的平均值?

现在代码给了我 Col B 的计数,然后是 Col C 的“X”和“Y”的平均值。

这些都有意义吗?!

【问题讨论】:

  • 请使用dput添加示例数据以重现问题。
  • 所以你想把它分成6组? X、Y * 红、蓝、黄?或者只是 Col B 的 3 个小组?
  • 没错,6组,每组C列的平均值
  • 请附上一张表格,显示您的预期输出,这样可以测试和验证潜在的解决方案并避免歧义。
  • 也许包括您预期输出的草图会更容易?

标签: r


【解决方案1】:

这就是你要找的吗? 更新了基本 R 和 dplyr 选项。

# simpler way to create a data.frame and preserve variable types.

Col_A <- c('X', 'X', 'X', 'Y', 'Y', 'X', 'Y', 'X')
Col_B <- c('red', 'yellow', 'blue', 'blue', 'yellow', 'red', 'blue', 'red')
Col_C <- c(12, 22, 13, 14, 25, 17, 11, 10)

dataset <- data.frame(Col_A, Col_B, Col_C)

#Using base R `aggregate`
aggregate(Col_C ~ Col_A + Col_B, data = dataset, mean)

# with `dplyr`
library(dplyr, warn.conflicts = FALSE)

dataset <- 
dataset %>% 
  group_by(Col_A, Col_B) %>% 
  summarise(mean = mean(Col_C, na.rm = TRUE))

dataset

#> # A tibble: 5 x 3
#> # Groups:   Col_A [2]
#>   Col_A Col_B   mean
#>   <chr> <chr>  <dbl>
#> 1 X     blue    13  
#> 2 X     red     13  
#> 3 X     yellow  22  
#> 4 Y     blue    12.5
#> 5 Y     yellow  25

# and as a `gt` table
library(gt)
gt(dataset)

reprex package (v2.0.1) 于 2021-12-23 创建

【讨论】:

  • 嗨,彼得,差不多!我想找到例如的平均值每个 Y - 蓝色都在一起
  • 对不起,我不确定我是否完全理解,也许您可​​以在我可以解决的问题中包含预期的输出。有两个 Y-blue 案例,Col_C 值为 11 和 14,因此平均值为 12.5。这似乎反映了针对@Wietse de Vries 的问题中的评论
  • 对不起,我只是重新阅读并尝试了我的实际数据集,它很完美,谢谢!!
【解决方案2】:

使用data.table结构,通过参数实现

library(data.table)
dataset <- data.table(Col_A, Col_B, Col_C)
dataset[, mean(Col_C), keyby=Col_B]

【讨论】:

  • 嗨!这次真是万分感谢。我可以做到这一点,但我还需要将该输出拆分为“Y”和“X”。我知道我可以将数据集一分为二并计算两次输出,但我一直在寻找一种一次性输出的方法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多