0
我具有由R:通过当某些条件满足时,改变另一个值数据集中的除法值
df <- data.frame(
id = seq(1:9),
sample = c("SRM1", "SAM1", "SAM2", "SAM3", "SRM2", "SAM4", "SAM5", "SRM3", "SRM4"),
ratio1 = rnorm(9, mean = 2, sd = 0.02),
ratio2 = rnorm(9, mean = 1, sd = 0.01))
产生的数据集df
和看起来像
id sample ratio1 ratio2
1 SRM1 2.0271 0.99915
2 SAM1 2.0241 0.98810
3 SAM2 1.9522 1.00300
4 SAM3 1.9877 1.00343
5 SRM2 1.9800 1.00522
6 SAM4 2.0184 0.97788
7 SAM5 2.0045 1.00549
8 SRM3 1.9684 0.99129
9 SRM4 2.0034 1.00310
我不得不分割值在ratio1
列的SRM
列中报告了固定号码a = 1.9
。然后,我必须将ratio1
列中SAM
行中报告的值除以“周围”SRM/a
值的平均值。
举一个例子:在id
1和5有两个SRM
样本,我计算avg1 <- mean(2.2701, 1.9800)/a
。此时我可以计算
df$ratio.corr <- rep(NA, 9)
df$ratio1.corr[c(2:4)] <- df$ratio1[c(2:4)]/avg1
对于SAM4
和SAM5
,avg2
将作为平均的ratio1
值的SRM2
和SRM3
样本来计算。
对于假想SAM6
与id = 10
,avg3
将被计算为报道SRM4
值ratio1
和假想SRM5
样品与即id = 11
之间的平均。
请考虑以下因素:
- 真实数据集有大约10000行;
avg
对于以字符串SRM
标识的样本,总是会计算出值;- 非
SRM
样品有许多不同的名称,没有共同的字符串;从连续SRM
- 距离可以变化(有时是3,4或甚至0行)也需要
- 类似的操作为
ratio2
列,但与b = 0.91
代替a
。
这只是让我发疯。