2016-04-18 6 views
0

У меня есть фрейм данных, как показано ниже. Я хотел бы заменить значение строк числом на основе строк 1 и 2. Если значение в другой строке (строки имеют две буквы, мне нравится индекс для каждой буквы), то они одинаковы с строкой 1 Мне нравится индекс 1 в противном случае 2 и для NA, нуль.Как заменить букву на номер?

Вход:

      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

Вы можете комбинировать ifelse и sub, чтобы получить каждый столбец нужного вывода.

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 
Смежные вопросы