三重矢量数据的平均值和标准差

时间:2014-11-04 00:33:06

标签: r vector standards deviation

我有一个实验,我一次测量少于200个变量。换句话说,我有三个约200个值的向量。

我想快速确定是否应该使用均值或中位数进行计算。我可以轻松地做出平均值((v1 + v2 + v3) / 3),但是如何计算SD以使其在~200 SDs的矢量中?中位数怎么样? 在得到这些值之后,我需要做生长曲线(测量是在一段时间内进行的)。

3 个答案:

答案 0 :(得分:0)

apply就是你做的。将矢量放在矩阵中,例如

mydat <- matrix(rnorm(600), ncol = 3)
means <- apply(mydat, MARGIN = 1, mean) # MARGIN = 1 is rows, MARGIN = 2 would be columns...
sds <- apply(mydat, MARGIN = 1, sd)
medians <- apply(mydat, MARGIN = 1, median)

虽然我不得不说,每个都有3个值,使用中位数声音非常值得怀疑。

答案 1 :(得分:0)

以下是dplyr解决方案:

require(dplyr)

d <- data.frame(
  x1 = rnorm(10),
  x2 = rnorm(10),
  x3 = rnorm(10)
  )

d %>%
  rowwise() %>%
  mutate(
    mean = mean(c(x1, x2, x3)),
    median = median(c(x1, x2, x3)),
    sd = sd(c(x1, x2, x3))
    )

听起来你对纵向数据也有一个实质性的问题。如果是这样,交叉验证将是这个问题的一个很好的平台。

答案 2 :(得分:0)

传统&#39; for&#39;也可以使用循环,但不是首选:

for(i in 1:nrow(d)) d[i,4]=mean(unlist(d[i,1:3]))
for(i in 1:nrow(d)) d[i,5]=sd(unlist(d[i,1:3]))
for(i in 1:nrow(d)) d[i,6]=median(unlist(d[i,1:3]))

names(d)[4:6]=c('meanval', 'sdval', 'medianval')

d
           x1         x2         x3     meanval     sdval  medianval
1  -1.3230176  0.6956100 -0.7210798 -0.44949580 1.0363556 -0.7210798
2  -1.8931166  0.9047873 -1.0378874 -0.67540558 1.4337404 -1.0378874
3  -0.2137543  0.1846733  0.6410478  0.20398893 0.4277283  0.1846733
4   0.1371915 -1.0345325 -0.2260038 -0.37444827 0.5998009 -0.2260038
5  -0.8662465 -0.8229465 -0.2230030 -0.63739866 0.3595296 -0.8229465
6  -0.2918697 -1.3543493  1.3025262 -0.11456426 1.3372826 -0.2918697
7  -0.4931936  1.7186173  1.3757156  0.86704643 1.1904138  1.3757156
8   0.3982403 -0.3394208  1.9316059  0.66347514 1.1585131  0.3982403
9  -1.0332427 -0.3045905  1.1513260 -0.06216908 1.1122775 -0.3045905
10 -1.5603811 -0.1709146 -0.5409815 -0.75742575 0.7195765 -0.5409815

使用来自@ DMC的答案。