在数据框中划分值

用户名

我下面有一个数据框。我的目标是获取每个唯一的“克隆” /“引物”集的“均值”,然后将“均值”除以“ 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用来获取每个组合中的对应MeanGen = 0ClonePrimer

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章