2014-02-20 54 views
0

我在數據框中有許多列代表實驗結果的重複。根據以前列的最頻繁值創建新列R

實施例這裏

 1a  2a  3a  4a  5a 
1  154  152  154  156  NA 
2  154  154  154  NA  NA 
3  154  154  154  154  NA 
4  154  154  154  154  NA 
5  154  NA  154  154  NA 
6  NA  NA  NA  154  NA 
7  154  154  NA  154  NA 
8  154  154  NA  154  NA 
9  154  NA  154  150  NA 
10  149  149  NA  149  149 

我想什麼是創建具有發生(> = 2)從每個其他列的值的另一列。

 1a  2a  3a  4a  5a score 
1  154  152  154  156  NA 154 
2  154  154  154  NA  NA 154 
3  154  154  154  154  NA 154 
4  154  154  154  154  NA 154 
5  154  NA  154  154  NA 154 
6  NA  NA  NA  154  NA  NA 
7  154  154  NA  154  NA 154 
8  154  154  NA  154  NA 154 
9  154  NA  154  150  NA 154 
10  149  149  NA  149  149 149 

編輯:修改上面的示例來演示。 flodel使用該模式的答案最初是成功的,但它會使用一個值,即使它只發生一次。如果每行中不存在2> x值,我希望它能夠出現NA或字符串(這更容易)。

+2

這中間的事情將無法正常工作。加上什麼時候什麼都沒有發生> = 2次或兩次分數在同一行中出現兩次? – rawr

+0

完全 - 這是我的快速修復嘗試,我會糾正上述 – scigimp

回答

1

你是不是在找中位數,但模式,這是很容易的定義自己:

Mode <- function(x, min.freq = 1L) { 
    f <- table(x) 
    k <- f[f >= min.freq] 
    if (length(k) > 0L) as.numeric(names(f)[which.max(f)]) else NA 
} 

test$score <- apply(test2, 1, Mode, min.freq = 2L) 
+0

這似乎起作用,直到我注意到,如果有少於兩個相同的結果(我上面的示例不包括任何),或者如果有相同的數量它會輸出其中的任何一個。我會進一步澄清我的問題 – scigimp

+0

已編輯。再試一次。 – flodel

+0

完美 - 適用於少於兩個值和匹配數量,非常感謝! – scigimp