R 三重矢量数据的平均值和标准差
我有一个实验,我测量了不到200个变量,一式三份。换句话说,我有三个向量,大约200个值 我想要一个快速的方法来确定我的计算应该使用平均值还是中值。我可以很容易地计算出平均值(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
(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和中位数。但其他方面也很有趣。也许你应该针对这些方面发布单独的问题。