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

R 三重矢量数据的平均值和标准差,r,vector,standards,deviation,R,Vector,Standards,Deviation,我有一个实验,我测量了不到200个变量,一式三份。换句话说,我有三个向量,大约200个值 我想要一个快速的方法来确定我的计算应该使用平均值还是中值。我可以很容易地计算出平均值((v1+v2+v3)/3),但我如何计算SD,使其在~200个SDs的向量中?中位数呢? 在获得这些值之后,我需要绘制生长曲线(在特定时间段内进行测量)。apply就是您要做的。让你的向量在一个矩阵中,例如 mydat <- matrix(rnorm(600), ncol = 3) means <- apply

我有一个实验,我测量了不到200个变量,一式三份。换句话说,我有三个向量,大约200个值

我想要一个快速的方法来确定我的计算应该使用平均值还是中值。我可以很容易地计算出平均值(
(v1+v2+v3)/3
),但我如何计算SD,使其在~200个SDs的向量中?中位数呢?
在获得这些值之后,我需要绘制生长曲线(在特定时间段内进行测量)。

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)

mydat这里有一个
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))
    )
require(dplyr)
d%
行()
变异(
平均值=平均值(c(x1,x2,x3)),
中位数=中位数(c(x1,x2,x3)),
sd=sd(c(x1,x2,x3))
)

听起来你也有一个关于纵向数据的实质性问题。如果是这样,crossvalidated将是解决这个问题的一个很好的平台。

也可以使用传统的“for”循环,尽管它不是首选:

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答案中的d。

您的意思是在时间1、时间2、时间3进行了3次测量,现在您想分析这3个时间段内200个不同变量的变化吗?那你为什么要均值还是中值?或者是你在200个时间段(时间1,时间2…时间200)中的每一个时间段进行了3次测量(为了准确度)?不,实验是一式三份进行的(600个样品,每个样品3次)。我需要取它们的平均值(如果标准差不是很大的话)或者取中位数。这是因为,有时在对活生物体进行的生物实验中,其本身存在很大的差异(细菌倾向于聚集在一起,因此分布不均匀,在有一些蒸发的多孔板中存在边界效应等)。对于其中一组,我们必须重复整个实验(我们有4组这项分析,这意味着我们要处理3(三份)x200(变量)x4个物种。所以生长(你在问题中提到的)超过200个时间段。不,但让我澄清一下:我们有在不同介质中生长的细菌菌株(不同的碳和氮源)多孔培养板(96个非常小的孔)。每个菌株两个不同的培养板,一式三份(相同的培养板,相同的菌株,每个3个培养板)。培养2周,每2-3天测量一次。我们需要比较不同菌株之间的生长情况,即在相同的培养基上,理想情况下在相同的时间点进行比较(可能不是这样,这是我们需要做一些统计分析的地方)。我们需要每个培养基每个时间点每个应变有一个值。平均值或平均值。你有3个答案如何获得你的三份值的平均值、sd和中位数。但其他方面也很有趣。也许你应该针对这些方面发布单独的问题。