2017-09-15 75 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" 
相關問題