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