表中的平均值和标准差

时间:2016-11-29 23:07:06

标签: r dataframe apply

在R中,当做两个变量表时,你会得到一个频率表

> table(data$Var1, data$Var2)

     1  2  3  4  5
  0  0  1  5  6 12
  1  1 10  6  7  0
  2  2  6  7  6  3
  3  2  9  8  3  2
  4  4  9  5  3  3
  5  3  4  9  4  4
  6  2  7  7  4  4
  7  2  7  7  6  2
  8  5  7  5  5  2
  9  5  4  5  6  4

有没有办法在每一行中加入meanSD,例如

     1  2  3  4  5  mean     SD
  0  0  1  5  6 12  4.20833  0.93153
  1  1 10  6  7  0  ..       ..
  2  2  6  7  6  3
  3  2  9  8  3  2
  4  4  9  5  3  3
  5  3  4  9  4  4
  6  2  7  7  4  4
  7  2  7  7  6  2
  8  5  7  5  5  2
  9  5  4  5  6  4

1 个答案:

答案 0 :(得分:1)

将表保存在名为T的内容中,然后:

对于均值和sd:

> cbind(T,
  mean=apply(T,1,function(x){
   (sum(x*(1:5)))/sum(x)}),
  sd=apply(T,1,function(x){sd(rep(1:5,x))}))

  1 2 3 4 5     mean        sd
0 4 3 1 1 1 2.200000 1.3984118
1 1 2 3 3 3 3.416667 1.3113722
2 2 2 1 2 1 2.750000 1.4880476
3 0 1 2 4 1 3.625000 0.9161254

2.2和1.3984是(c(1,1,1,1,2,2,2,3,4,5))的平均值和sd

通过用rep重建原始向量来计算sd可能效率不高 - 但是它的延迟并计算出sd的所有平方和和的平方和不是我大脑在凌晨1点可以做的事情。