2016-04-18 15 views
0

私は以下のようなデータフレームを持っています。私は行の値を行1と2に基づいて置き換えたいと思います。異なる行の行(行は2文字で、私は各文字のインデックスが好きです)は行1と同じです。そうでなければインデックス2、ゼロ。文字を数字に置き換えるには?

入力:

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

が出力:

   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

ケースは、あなたが記述した通りになるでしょうか? (条件付きの最初の2行のみ)?したがって、2つの可能性(C/Cなど)のみ? – Sotos

+0

はい、あなたは正しいです。 – tob

答えて

0

あなたが希望する出力の各列を取得するためにifelsesubを組み合わせることができます。

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 
関連する問題