1

我如何在 R 中从如下所示的数据集中计算总体方差和每个组的方差(例如):

Group Count Value
A      3     5
A      2     8
B      1     11
B      3     15

我知道要从整体上计算方差,而忽略我会做的组: var(rep(x$Value, x$Count)), 但是如何自动计算每个组的方差并考虑频率?例如,A 组、B 组等的方差......我希望我的输出具有以下标题:

Group, Total Count, Group Variance 

我还查看了此链接;R计算平均值,中位数,来自具有不同频率分布的文件的方差(没有组分量),因此这不是重复的。

感谢您的所有帮助。

4

2 回答 2

3

一种选择是使用data.table. 将 data.frame 转换为 data.table ( setDT) 并通过“Group”获取var“Value”和sum“Count”。

library(data.table)
setDT(df1)[, list(GroupVariance=var(rep(Value, Count)),
                      TotalCount=sum(Count)) , by = Group]
#    Group GroupVariance TotalCount
#1:     A           2.7          5
#2:     B           4.0          4

类似的使用方式dplyr

library(dplyr)
group_by(df1, Group) %>% 
      summarise(GroupVariance=var(rep(Value,Count)), TotalCount=sum(Count))
#     Group GroupVariance TotalCount
#1     A           2.7          5
#2     B           4.0          4
于 2015-02-22T15:47:49.870 回答
3

这是一个带有基础 R 的快速包装器。第一步是按 Count 增长您的数据集,然后按组计算方差

df1 <- df[rep(seq_len(nrow(df)), df$Count), ]
with(df1, tapply(Value, Group, var))
#   A   B 
# 2.7 4.0 

或类似地

aggregate(Value ~ Group, df1, function(x) c(Var = var(x), Count = length(x)))
#   Group Value.Var Value.Count
# 1     A       2.7         5.0
# 2     B       4.0         4.0
于 2015-02-22T16:11:02.020 回答