我的数据框看起来像这样:
> df
POP A B C D E
NA CC CC TC TT CC
NA TG TT TT TT TG
NA TT TA TT TT TT
NA CC CC TC TT CC
NA TC TT TT TT TT
NA AG GG GG GG AG
NA AA AA AG AG AA
NA GG GA GG AA GG
NA AA AA AA AT AA
我需要将列A
循环到E
,并在条件与其他列匹配时填充第一列POP
。特别是,我希望得到这样的结果:
> df
POP A B C D E
C/T CC CC TC TT CC
G/T TG TT TT TT TG
A/T TT TA TT TT TT
C/T CC CC TC TT CC
C/T TC TT TT TT TT
A/G AG GG GG GG AG
A/G AA AA AG AG AA
A/G GG GA GG AA GG
A/T AA AA AA AT AA
因此,当找到包含两个不同字母的第一列时,请按字母顺序打印由POP
分隔的/
列中的两个字母。
真实数据框有700列和10000行。
答案 0 :(得分:0)
这是一个想法:
ind <- apply(sapply(df[-1], function(x) grepl('([A-Z])\\1', x)),
1,
function(y) match(FALSE, y))
ind
#[1] 3 1 2 3 1 1 3 2 4
mapply(function(i, j)
if (!is.na(j))
paste(sort(strsplit(levels(df[[j]])[df[i, j]], '')[[1]]),
collapse='/')
else
j,
seq_along(ind), ind + 1)
#[1] "C/T" "G/T" "A/T" "C/T" "C/T" "A/G" "A/G" "A/G" "A/T"