我有一个数据表,其中Filename列的每个值在Compound列中都有一组值。某些化合物值具有与另一个化合物匹配的IS值。我需要将IS中的值与Compound列匹配,从该行检索Chrom.1.RT的值,然后将该值放在IS值所在行的IS_RT列中。
示例:
Filename Compound Chrom.1.RT IS IS_RT
1_04 Amp_d6 2.93075 0 0
1_04 Bup_d4 7.280333 0 0
1_04 Cocaine_d3 5.66195 0 0
1_04 10-monohyd 0 Cocaine_d3 5.66195
1_04 2-hydroxy 0 Bup_d4 0
1_04 6-MAM 3.566433 Amp_d6 0
1_05 Amp_d6 2.94 0 0
1_05 Bup_d4 7.3 0 0
1_05 Cocaine_d3 5.65 0 0
1_05 10-monohyd 0 Cocaine_d3 5.65
1_05 2-hydroxy 0 Bup_d4 0
1_05 6-MAM 3.6 Amp_d6 0
10-monohyd的线条显示了我想要做的事情。我不确定从哪里开始。在此先感谢您的帮助!
编辑:
我尝试过的代码似乎不起作用:
sampleList <- unique(df1$Filename)
for (i in sampleList){
SampleRows<-which(df1$Filename == sampleList[i])
RefRows <- subset(df1, Filename== sampleList[i])
df1$IS.RT[SampleRows]<- RefRows$Chrom.1.RT[match(df1$IS[SampleRows], RefRows$Compound)]
}
答案 0 :(得分:0)
我不得不承认我对自己的理解并不太自信,但这是基于我最好的解释而得到的。
重新创建数据 *
请在将来使用dput
*
stri_split_lines1('Filename Compound Chrom.1.RT IS IS_RT
1_04 Amp_d6 2.93075 0 0
1_04 Bup_d4 7.280333 0 0
1_04 Cocaine_d3 5.66195 0 0
1_04 10-monohyd 0 Cocaine_d3 5.66195
1_04 2-hydroxy 0 Bup_d4 0
1_04 6-MAM 3.566433 Amp_d6 0
1_05 Amp_d6 2.94 0 0
1_05 Bup_d4 7.3 0 0
1_05 Cocaine_d3 5.65 0 0
1_05 10-monohyd 0 Cocaine_d3 5.65
1_05 2-hydroxy 0 Bup_d4 0
1_05 6-MAM 3.6 Amp_d6 0') %>% {
a <- stri_split_regex(., '\\s+', simplify = T)
cl <- a[1,]
setNames(as.data.frame(a[c(-1,-2),]),cl)
} -> a_d_f
因此,我似乎在目标中迭代记录,如果记录在IS
列中有值,则将该值与Compound
列中的位置匹配,并对于该行获取相应的Chrom.1.RT
值并放入最初感兴趣记录的IS_RT
列。但是有一堆对我来说没有逻辑意义;所以这是一个起点:
- 逐行遍历数据框
- 将该行作为数据框分配给
dv
- 如果
dv
的{{1}}列不是IS
,请在master data.frame中找到该单元格中的值,然后在中查找该行的值 ORIGINAL data.frame。使用max-distance作为确定方式 要使用哪个值,因为有多种可能性。- 将其分配给
的单元格0
- 返回
- 绑定到一个data.frame。
醇>
IS_RT
答案 1 :(得分:0)
matched_compounds <- merge(
df1[, c('Filename', 'IS', 'IS_RT')],
df1[, c('Filename', 'Compound', 'Chrom.1.RT')],
by.x = c('Filename', 'IS'),
by.y = c('Filename', 'Compound'),
all.x = TRUE
)
df1$IS_RT <- matched_compounds$Chrom.1.RT
答案 2 :(得分:0)
这是最终起作用的。它似乎有点笨重,但它给了我正确的输出我需要的。 :
# Add IS_RT column
df1$IS_RT<- 0
#Get a list of the unique filename values
SampleList <- unique(df1$Filename)
# Make two tables to use as a references, and loop through the list of unique filenames
for (i in 1:length(SampleList)) {
foo <- subset(df1, Filename == SampleList[i])
Reference <- foo
foo$IS_RT <- Reference$Chrom.1.RT[ match(foo$IS,Reference$Compound)]
SampleRows <- which(df1$Filename == SampleList[i])
df1$IS_RT[SampleRows] <- Reference$Chrom.1.RT[match(foo$IS,Reference$Compound)]
}