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

1 つのオプションは、を使用してdata.tableいます。data.frameをdata.table( setDT)に変換し、 var「値」と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
于 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 に答える