如何用数字代替字母?

时间:2016-04-18 11:22:15

标签: r replace dataframe split

我有如下数据框。我想根据行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       

1 个答案:

答案 0 :(得分: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