2017-09-15 77 views
1

我有一个数据帧寻找这样的:我需要循环列AE遍历数据帧的列和填充另一列,如果条件符合

> 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 

,并填充第一列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行。

+1

这看起来像大学基本的锻炼。看起来很容易,所以请稍微思考一下。 – Fibman

回答

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" 
相关问题