当通过R中的不同变量进行分组和汇总时,计算分类变量的出现次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当通过R中的不同变量进行分组和汇总时,计算分类变量的出现次数相关的知识,希望对你有一定的参考价值。

我有一个表df,看起来像这样:

a <- c(10,20, 20, 20, 30)
b <- c("u", "u", "u", "r", "r")
c <- c("a", "a", "b", "b", "b")
df <- data.frame(a,b,c)

我想创建一个新表,其中包含col a的平均值,按变量c分组。我希望有一个列,其中包含每个组中b类型的出现次数c。因此,我希望结果表看起来像df2:

a_m <- c(15, 23.3)
c <- c("a", "b")
counts_b <-c("2 u", "1 u, 2 r")
df2 <- data.frame(a_m, c, counts_b)

到目前为止我所拥有的是:

df2 <- df %>% group_by(c) %>% summarise(a_m = mean(a, na.rm = TRUE))

我不知道如何在示例df2中添加列counts_b。

朱利亚

答案

这是一种使用一点点table魔法的方法:

df %>%
    group_by(c) %>%
    summarise(a_mean = mean(a),
              b_list = paste(names(table(b)), table(b), collapse = ', '))

# A tibble: 2 x 3
  c     a_mean b_list  
  <fct>  <dbl> <chr>   
1 a       15.0 r 0, u 2
2 b       23.3 r 2, u 1
另一答案

这是使用reshape2的另一种解决方案。输出格式可能更方便使用,b的每个值都有自己的列,其中包含出现次数。

out1 <- dcast(df, c ~ b, value.var="c", fun.aggregate=length)

  c r u
1 a 0 2
2 b 2 1

out2 <- df %>% group_by(c) %>% summarise(a_m = mean(a))

# A tibble: 2 x 2
       c      a_m
  <fctr>    <dbl>
1      a 15.00000
2      b 23.33333

df2 <- merge(out1, out2, by=c)

  c r u      a_m
1 a 0 2 15.00000
2 b 2 1 23.33333

以上是关于当通过R中的不同变量进行分组和汇总时,计算分类变量的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化交互作用图(Interaction Plot):可视化不同分组(分类变量1)在不同剂量下(分类变量2)的箱图(box plot)均值计算并连接成线图(line plot)

R语言基于R语言的数据挖掘之决策树

R - 对连续变量标题进行分组,将分类变量因子作为行并聚合为最小值、最大值、平均值

创建不同长度的分类变量的汇总表

实验8-SPSS交叉表分析

通过对连续变量进行分组来替换分类变量的 NaN