2016-06-07 70 views
0

如何基于在df2值与最近的比赛

x <- "Sample Chromosome Start 
     Samp.1  6 14150000 
     Samp.1  7 70000 
     Samp.1  13 19250000"  
df1 <-read.table(text=x, header=T, sep = "") 

x2 <- "Name  Chromosome Position 
     7:50000 7 50000 
     7:57670000 7 57670000 
     6:14170000 6 14170000 
     6:26950000 6 26950000 
     6:36950000 6 36950000 
     13:19270000 13 19270000 
     13:83370000 13 83370000"   
df2 <- read.table(text=x2, header=T, sep="") 

output <- "Sample Chromosome Start 
      Samp.1 6  14170000 
      Samp.1 7  50000 
      Samp.1 13  19270000" 
+0

shift whic columns?你能清楚吗? –

+0

如果df1 [,2] == df2 [,2]相对于df2 [,3]移动df1 [,3] – beginner

+0

“shift”是什么意思?这个词有几十个含义。 –

回答

1

我从你的输出猜测位置值最接近的匹配在df1位移开始值转移,你正在寻找的最接近的变化相对于你的开始位置,并将其更换。以下是您可以如何使用dplyr

library(dplyr) 
merge(df1, df2[,c(2,3)], by = "Chromosome") %>% 
    group_by(Chromosome) %>% 
    filter(min(abs(Start - Position)) == abs(Start - Position)) %>% 
    select(Sample, Chromosome, Position) %>% unique 


# Source: local data frame [3 x 3] 
# Groups: Chromosome [3] 
# 
# Sample Chromosome Position 
# (fctr)  (int) (int) 
# 1 Samp.1   6 14170000 
# 2 Samp.1   7 50000 
# 3 Samp.1   13 19270000 
+0

有趣的..但是如果有两个相对于起始值的位置关闭值..for例如在输出中,第一个分段14170000,因为这是最接近14150000的值。如果在位置14130000和14170000中存在两个值,该怎么办? – beginner