首页 > 解决方案 > 在不知道重复次数的情况下,如何计算同一样本的重复实验值的平均值?

问题描述

我有一个 csv 文件,其中包含许多样本的实验值数据集,有时还会复制相同的样本。对于复制,我只考虑属于同一样本的复制的平均值。问题是,重复次数各不相同,可以是 2、3、4 等等......

我的代码不正确,因为它应该仅在重复数为 2 时才有效(因为我使用循环将一个 sampleID 与循环中的前一个 sampleID 进行比较)。另外,我的代码不起作用,它为我的所有样本添加了相同的平均值,这是不对的。我认为循环开始时也存在问题。因为当 x=1 时,x-1=0 不对应任何值,所以可能会导致代码无法工作?我是 R 的初学者,我从未接受过任何课程或培训,我正在接受培训以自学,所以提前感谢您的帮助。

我的数据集:

在此处输入图像描述

预期输出:

在此处输入图像描述

PS:在这个例子中,重复数是 2。但是,它可能会因样本而异,有时是 2,有时是 3、4 等等......

for (x in length(dat$Sample)){
  if (dat$Sample[x]==dat$Sample[x-1]){
    dat$Average.OD[x-1] <- mean(dat$OD[x], dat$OD[x-1])
    dat$Average.OD[x] <- NA
  }
}

标签: rloopsconditional-statementsmeanreplicate

解决方案


让我通过 data.table 向您展示可能的解决方案。

#Data
data <- data.frame('Sample'=c('Blank','Blank','STD1','STD1'), 
                             'OD'=c(0.07,0.08,0.09,0.10))

#Code
#Converting our data to data.table.
setDT(data)

#Finding the average of OD by Sample Column. Here Sample Column is the key.If you want it by both Sample and Replicates, pass both of them in by and so on.
data[, AverageOD := mean(OD), by = c("Sample")]

#Turning all the duplicate AverageOD values to NA.
data[duplicated(data, by = c("Sample")), AverageOD := NA] 

#Turning column name of AverageOD to  Average OD
names(data)[which(names(data) == "AverageOD")] = 'Average OD'

如果您有任何问题,请告诉我。


推荐阅读