2016-04-18 24 views
0

Ich habe Datenrahmen wie unten. Ich möchte den Wert der Zeilen durch die Zahl basierend auf den Zeilen 1 und 2 ersetzen. Wenn der Wert in einer anderen Zeile (Zeilen haben zwei Buchstaben, ich mag Index für jeden Buchstaben) sind die gleichen mit Zeile 1 Ich mag Index 1 sonst 2 und für NA, Null.Wie man Buchstaben durch Zahlen ersetzt?

Eingang:

      a1   a2 
     A     C   T   
     B     T   C   
    AC11    C/C  C/C 
    AC12    C/C  T/C   
    Ac13    C/C  NA   

Ausgang:

   a1     a2 
      a1.1 a1.2   a2.1 a2.2 
AC11   1  1    2 2 
AC12   1  1    1 2 
Ac13   1  1    0 0  
+0

Wird der Fall immer so sein, wie Sie beschrieben haben? (d.h. nur die ersten 2 Reihen mit den Bedingungen)? also nur 2 Möglichkeiten (C/C, etc.)? – Sotos

+0

ja, du hast Recht. – tob

Antwort

0

Sie kombinieren können ifelse und sub jede Spalte Ihrer gewünschten Ausgang zu erhalten.

ifelse(sub('.*/', '', d$V2[3:nrow(d)]) == d$V2[1], 1, 
     ifelse(sub('.*/', '', d$V2[3:nrow(d)]) == d$V2[2], 2, 0)) 
#[1] 1 1 1 
ifelse(sub('/.*', '', d$V2[3:nrow(d)]) == d$V2[1], 1, 
     ifelse(sub('/.*', '', d$V2[3:nrow(d)]) == d$V2[2], 2, 0)) 
#[1] 1 1 1 
ifelse(sub('.*/', '', d$V3[3:nrow(d)]) == d$V3[1], 1, 
     ifelse(sub('.*/', '', d$V3[3:nrow(d)]) == d$V3[2], 2, 0)) 
#[1] 2 2 NA 
ifelse(sub('/.*', '', d$V3[3:nrow(d)]) == d$V3[1], 1, 
     ifelse(sub('/.*', '', d$V3[3:nrow(d)]) == d$V3[2], 2, 0)) 
#[1] 2 1 NA 
Verwandte Themen