我需要匹配从df3 $ end到df2 $ V2和df $ V3的模式向量。然后,最终输出文件应为df1,并从df2附加匹配的列V4和V5,如预期输出所示。
df1 <- read.table(text=' chr init
12 25289552
3 180418785
3 180434779
6 69909
5 284892182', header=TRUE)
df2 <- read.table(text=' V1 V2 V3 V4 V5 V6
1 69094 321233 medium 2.1 321234
1 69094 21231310 medium 3.4 21231313
12 25289552 180434559 high 1.1 180434779
1 69095 69909 medium 2.9 69909
3 180418785 284892182 medium 1.8 284892182
3 180434779 69909 low 2.8 69909', header=TRUE)
df3 <- read.table(text=' chr init end
12 25289552 180434779
3 180418785 321233
3 180434779 180434779
6 69909 69909
5 284892182 21231313
3 180418785 284892182 ', header=TRUE)
#expected output
df1_chr df1_init df3_end df2_V4 df2_V5 df2_V4_2 df2_V5_2
12 25289552 180434779 high 1.1 NA NA NA
3 180418785 321233 medium 2.1 284892182 medium 1.8
3 180434779 180434779 high 1.1 NA NA NA
6 69909 69909 medium/low 2.9/2.8 NA NA NA
5 284892182 21231313 medium 3.4 NA NA NA
我尝试过:
matches <- filter(df2, grepl(paste(df3$end, collapse="|"), df2$V3,df2$V4))
这给出了匹配的行。现在,我需要使用df1并将df3中的匹配结束列,V4和df2中的V5添加到输出中。如果df1_init具有不同的df3_ends,则必须将它们添加为单独的列,如示例所示。感谢您为最终输出所提供的帮助。谢谢。
答案 0 :(得分:0)
您可以使用dplyr吗?
library(dplyr)
df1 %>%
inner_join(df3, by=c("chr","init")) %>%
inner_join(df2,by=c("end"="V3")) %>%
select(-V1,-V2) %>% group_by(chr,init,end) %>%
summarise(df2_V4 = paste(V4,collapse=","),df2_V5 = paste(V5,collapse=","))