我正在尝试将来自sample_id1
的{{1}},sample_id2
,value
与来自File1.txt
的{{1}}和sampleID
进行匹配,与valueID
和count.txt
相乘。我不确定如何在op1
循环中执行此操作并定义两个新列。
op2
在for
中,我将第一行的File1.txt
sample_id1 sample_id2 op1 op2 value
IX12 IX78 2 3 15
IX12 IX81 4 0 15
IX78 IX81 66 43 35
IX12 IX78 23 10 35
IX12 IX81 43 0 55
IX12 IX78 43 0 55
File2.txt
sampleID valueID count
IX12 15 900
IX12 35 2000
IX12 55 3500
IX78 15 865
IX78 35 1500
IX78 35 2400
IX81 15 234
IX81 35 906
IX81 55 2001
output.txt
sample_id1 sample_id2 op1 op2 value new_col_op1 new_col_op2
IX12 IX78 2 3 15 1800 2595
IX12 IX81 4 0 15 3600 0
IX78 IX81 66 43 35 99000 38958
........
和output.txt
与900和865相乘并生成op1
和op2
感谢。
答案 0 :(得分:1)
我不确定这是否符合您的要求:( df1
和df2
是数据集)
df11 <- transform( merge(df1[,-2], df2, by.x=c("sample_id1", "value"), by.y=c("sampleID", "valueID")), new_col_op1=op1*count)
df12 <- transform( merge(df1[,-1], df2, by.x=c("sample_id2", "value"), by.y=c("sampleID", "valueID")), new_col_op2=op2*count)
res <- merge(df11, df12, by=c("value", "op1", "op2"),sort=FALSE)
head(res,4)
# value op1 op2 sample_id1 count.x new_col_op1 sample_id2 count.y new_col_op2
#1 15 2 3 IX12 900 1800 IX78 865 2595
#2 15 4 0 IX12 900 3600 IX81 234 0
#3 35 23 10 IX12 2000 46000 IX78 1500 15000
#4 35 23 10 IX12 2000 46000 IX78 2400 24000
或使用dplyr
library(dplyr)
df11 <- inner_join(df1[,-2],setNames(df2, c("sample_id1", "value", "count"))) %>% mutate(new_col_op1=op1*count)
df12 <- inner_join(df1[,-1],setNames(df2, c("sample_id2", "value", "count"))) %>% mutate(new_col_op2=op2*count)
res1 <- inner_join(df11, df12, by=c("op1", "op2", "value"))
head(res1,4)
# sample_id1 op1 op2 value count.x new_col_op1 sample_id2 count.y new_col_op2
#1 IX12 2 3 15 900 1800 IX78 865 2595
#2 IX12 4 0 15 900 3600 IX81 234 0
#3 IX12 23 10 35 2000 46000 IX78 1500 15000
#4 IX12 23 10 35 2000 46000 IX78 2400 24000