我下面有一个数据框。我的目标是获取每个唯一的“克隆” /“引物”集的“均值”,然后将“均值”除以“ Gen”值0。例如,对于值为“ 100”的“ Clone”元素和HC的“引物”,我要执行0.6417179 / 0.6417179、0.6553668 / 0.6417179、0.6106679 / 0.6417179等。LC和其他克隆也是如此。最终,我想将这些值插入数据框的新列中。我知道我可以用mapply做到这一点,但我正在寻找一种更简单的方法。数据的前五行应类似于new.data。
data <- structure(list(Sample.Num = structure(c(1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L, 5L, 5L, 6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L), .Label = c("Sample 01",
"Sample 02", "Sample 03", "Sample 04", "Sample 05", "Sample 06",
"Sample 07", "Sample 08", "Sample 09", "Sample 10", "Sample 11",
"Sample 12", "Sample 13", "Sample 14", "Sample 15", "Sample 16",
"Sample 17", "Sample 18", "Sample 19", "Sample 20"), class = "factor"),
Sample.Name = 1:20, Mean = c(0.641717918200621, 0.732758814939348,
0.655366791432443, 0.711143128584475, 0.610667936146982,
0.687271981619014, 0.618062095091066, 0.687031960480684,
0.411787349743996, 0.546062868229852, 0.415749282456685,
0.518132889723448, 0.389048523492206, 0.499694202691936,
0.388389111597721, 0.484997103717381, 0.828167703325264,
1.06355991484498, 1.35633865722435, 1.83226419032622), SD = c(0.0182658841978206,
0.0215796881079389, 0.025765124311367, 0.0209344970091099,
0.0123992922337212, 0.00595663805702379, 0.0144295473675257,
0.0113668742903368, 0.00464092492744697, 0.00900809118776624,
0.00805595964358455, 0.00523626400646404, 0.0026802389683131,
0.00731653117590531, 0.00566027602189678, 0.00868682006010785,
0.683066526651359, 0.863371994277613, 0.00291361279231728,
0.0361119112674108), Primer = c("HC", "LC", "HC", "LC", "HC",
"LC", "HC", "LC", "HC", "LC", "HC", "LC", "HC", "LC", "HC",
"LC", "HC", "LC", "HC", "LC"), Clone = c(100, 100, 100, 100,
100, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300, 400,
400, 400, 400, 400), Gen = c(0, 0, 20, 20, 40, 40, 60, 60,
80, 80, 0, 0, 20, 20, 40, 40, 60, 60, 80, 80)), row.names = c(NA,
20L), class = "data.frame")
new.data <- structure(list(Sample.Num = structure(c(1L, 1L, 2L, 2L, 3L), .Label = c("Sample 01",
"Sample 02", "Sample 03", "Sample 04", "Sample 05", "Sample 06",
"Sample 07", "Sample 08", "Sample 09", "Sample 10", "Sample 11",
"Sample 12", "Sample 13", "Sample 14", "Sample 15", "Sample 16",
"Sample 17", "Sample 18", "Sample 19", "Sample 20"), class = "factor"),
Sample.Name = 1:5, Mean = c(0.641717918200621, 0.732758814939348,
0.655366791432443, 0.711143128584475, 0.610667936146982),
SD = c(0.0182658841978206, 0.0215796881079389, 0.025765124311367,
0.0209344970091099, 0.0123992922337212), Primer = c("HC",
"LC", "HC", "LC", "HC"), Clone = c(100, 100, 100, 100, 100
), Gen = c(0, 0, 20, 20, 40), New = c(1, 1, 1.02, 0.97, 0.95
)), row.names = c(NA, 5L), class = "data.frame")
您可以match
用来获取每个和组合中的对应Mean
值。Gen = 0
Clone
Primer
library(dplyr)
data %>%
group_by(Clone, Primer) %>%
mutate(New = Mean/Mean[match(0, Gen)])
# Sample.Num Sample.Name Mean SD Primer Clone Gen New
# <fct> <int> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
# 1 Sample 01 1 0.642 0.0183 HC 100 0 1
# 2 Sample 01 2 0.733 0.0216 LC 100 0 1
# 3 Sample 02 3 0.655 0.0258 HC 100 20 1.02
# 4 Sample 02 4 0.711 0.0209 LC 100 20 0.971
# 5 Sample 03 5 0.611 0.0124 HC 100 40 0.952
# 6 Sample 03 6 0.687 0.00596 LC 200 40 NA
# 7 Sample 04 7 0.618 0.0144 HC 200 60 NA
# 8 Sample 04 8 0.687 0.0114 LC 200 60 NA
# 9 Sample 05 9 0.412 0.00464 HC 200 80 NA
#...
#...
NA
对于不Gen = 0
存在的组合,这将返回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句