【问题标题】:Frequency Table with Column of Average in RR中带有平均值列的频率表
【发布时间】:2020-11-03 07:29:57
【问题描述】:

给定一个数据框df,我生成如下:

set.seed(1)
b <- runif(100)
set.seed(1)
a <- sample.int(9, 100, replace = TRUE)
df <- data.frame(a,b)

我形成了如下所示的频率表但不满意:

sortted_a <- data.frame(table(df$a))
sortted_a
#  Var1 Freq
#1    1   14
#2    2    8
#3    3   10
#4    4    9
#5    5   11
#6    6   11
#7    7    5
$8    8   14
#9    9   18

我宁愿想要一个表格,它不仅会显示vector afrequency,还会显示frequency of a 以及相关联的averages of vector b,如下在R 中:

#  Var1 Freq   Ave_b
#1    1   14   0.6750
#2    2    8   0.0027
#3    3   10   0.8298
#4    4    9   0.1873
#5    5   11   0.3874
#6    6   11   0.7632
#7    7    5   0.5812
$8    8   14   0.5478
#9    9   18   0.4389

【问题讨论】:

    标签: r frequency frequency-distribution


    【解决方案1】:

    如果您想坚持使用基数 R,您可以使用 tapply() 来找到 b 的平均值,然后使用您的排序后的 data.frame 找到 cbind()

    ave_b <- tapply(df$b,df$a,mean)
    new_df <- cbind(sortted_a, ave_b)
    

    【讨论】:

      【解决方案2】:

      dplyr 中,您可以按a 分组并统计b 列的频率和平均值:

      library(dplyr)
      
      df %>%
        group_by(a) %>%
        summarise(Freq = n(), 
                  b = mean(b))
      

      类似地,在基础 R 和 data.table 中:

      aggregate(b~a, df, function(x) c(Freq = length(x), b = mean(x)))
      
      library(data.table)
      setDT(df)[, .(Freq = .N, b = mean(b)), a]
      

      【讨论】:

        猜你喜欢
        • 2012-08-07
        • 2016-11-24
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-22
        • 2014-03-28
        • 2019-11-01
        相关资源
        最近更新 更多