2016-06-07 14 views
0

Wie die Startwerte in df1 Sitz in Positionswert von df2die Werte mit dem nächsten Spiel verschieben

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 Spalten? Könntest du klar sein? –

+0

shift df1 [, 3] in Bezug auf df2 [, 3] wenn df1 [, 2] == df2 [, 2] – beginner

+0

was meinst du mit "shift"? Dieses Wort hat Dutzende Bedeutungen. –

Antwort

1

ich von Ihrem Ausgang erraten auf dem nächsten Spiel verschieben, für die nächste Variante des suchen Sie Position in Bezug auf Ihren Start und ersetzen Sie es. Hier ist, wie Sie es mit dplyr tun können:

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

interessant..aber was ist, wenn es zwei schließen Wert für die Position in Bezug auf Startwert..for zB in der Ausgabe das erste Segment 14170000, weil dies der nächstliegende Wert zu 14150000 ist. Was ist, wenn in der Position zwei Werte vorhanden sind, 14130000 und 14170000. – beginner

Verwandte Themen