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
。
這只是讓我發瘋。