对于R中的循环分块

特德·莫斯比

我有一些看起来像这样的数据:

Trace Name             Value
Exp.618.1.1. Saline    -562
Exp.618.1.2. Ref       -30
Exp.618.1.3. 100nM     -50
Exp.618.1.4. 1uM       -65
Exp.618.1.5. 10uM      -75
Exp.619.2.1 Saline     -540
Exp.619.2.2 Ref        -463
Exp.619.2.3. 100nM     -40
Exp.619.2.4 1uM        -39
Exp.619.2.5 10uM       -37

我想将此数据标准化为“引用”行。每个Exp有5行,而ref总是排在第二行。我该如何使用for循环?我以为我需要循环,但我不确定如何循环。

谢谢!

罗兰
DF <- read.table(text = "Trace Name             Value
                Exp.618.1.1. Saline    -562
                 Exp.618.1.2. Ref       -30
                 Exp.618.1.3. 100nM     -50
                 Exp.618.1.4. 1uM       -65
                 Exp.618.1.5. 10uM      -75
                 Exp.619.2.1 Saline     -540
                 Exp.619.2.2 Ref        -463
                 Exp.619.2.3. 100nM     -40
                 Exp.619.2.4 1uM        -39
                 Exp.619.2.5 10uM       -37", header = TRUE)

包data.table在这里很有用(但是您也可以使用dplyr和许多其他split-apply-combine工具)。

library(data.table)
setDT(DF)

创建一个标识实验的列。gsub在正则表达式后面使用了此功能:

DF[, Exp := gsub("(?<=\\d\\.[\\d+]).+", "", Trace, perl = TRUE)]

根据需要调整正则表达式。

然后,您可以通过实验进行操作:

DF[, Value_norm := Value / Value[2], by = Exp]

#           Trace   Name Value       Exp  Value_norm
# 1: Exp.618.1.1. Saline  -562 Exp.618.1 18.73333333
# 2: Exp.618.1.2.    Ref   -30 Exp.618.1  1.00000000
# 3: Exp.618.1.3.  100nM   -50 Exp.618.1  1.66666667
# 4: Exp.618.1.4.    1uM   -65 Exp.618.1  2.16666667
# 5: Exp.618.1.5.   10uM   -75 Exp.618.1  2.50000000
# 6:  Exp.619.2.1 Saline  -540 Exp.619.2  1.16630670
# 7:  Exp.619.2.2    Ref  -463 Exp.619.2  1.00000000
# 8: Exp.619.2.3.  100nM   -40 Exp.619.2  0.08639309
# 9:  Exp.619.2.4    1uM   -39 Exp.619.2  0.08423326
#10:  Exp.619.2.5   10uM   -37 Exp.619.2  0.07991361

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章