对于 R 中的循环分块

For Loop chunking in 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 循环做到这一点?我在想我需要 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)

Package data.table 在这里很有用(但您也可以使用 dplyr 和许多其他拆分-应用-组合工具)。

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

您也可以使用 dplyr:

library(dplyr)
dat %>% group_by(exptid = substr(dat$Trace, 1, 9)) %>%
        mutate(normalised = Value / Value[Name == "Ref"])

Source: local data frame [10 x 5]
Groups: exptid [2]

          Trace   Name Value    exptid  normalised
         (fctr) (fctr) (int)     (chr)       (dbl)
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