从R中的频率table计算分组方差
Calculating grouped variance from a frequency table in R
我如何在 R 中从如下所示的数据集中计算每个组的总体方差(例如):
Group Count Value
A 3 5
A 2 8
B 1 11
B 3 15
我知道计算整体方差,忽略我会做的组:
var(rep(x$Value, x$Count)),
但是我如何自动计算每组考虑频率的方差?例如,A 组、B 组等的方差。我希望我的输出具有以下 headers:
Group, Total Count, Group Variance
我也评论过这个link; R computing mean, median, variance from file with frequency distribution 这是不同的(没有组组件)所以这不是重复的。
感谢大家的帮助。
一个选项是使用 data.table
。将 data.frame 转换为 data.table (setDT
) 并通过 [=23] 得到 "Value" 的 var
和 "Count" 的 sum
=].
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
这是一个基于 R 的快速包装器。第一步是按计数增加数据集,然后按组计算方差
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
我如何在 R 中从如下所示的数据集中计算每个组的总体方差(例如):
Group Count Value
A 3 5
A 2 8
B 1 11
B 3 15
我知道计算整体方差,忽略我会做的组:
var(rep(x$Value, x$Count)),
但是我如何自动计算每组考虑频率的方差?例如,A 组、B 组等的方差。我希望我的输出具有以下 headers:
Group, Total Count, Group Variance
我也评论过这个link; R computing mean, median, variance from file with frequency distribution 这是不同的(没有组组件)所以这不是重复的。
感谢大家的帮助。
一个选项是使用 data.table
。将 data.frame 转换为 data.table (setDT
) 并通过 [=23] 得到 "Value" 的 var
和 "Count" 的 sum
=].
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
这是一个基于 R 的快速包装器。第一步是按计数增加数据集,然后按组计算方差
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