我有一些看起来像这样的数据:
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
我想将此数据规范化为Ref行。每个Exp有5行,ref总是在第2行。我怎么能用for循环呢?我想我需要循环,但我不确定如何。
谢谢!
答案 0 :(得分:3)
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
答案 1 :(得分:1)
您也可以使用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