2016-11-25 39 views
-2

這顯然是一個簡單的問題,但我無法弄清楚使用什麼函數。以下是樣本數據:如何根據最頻繁的標籤更改一行的標籤?

gg <- data.frame(ID = c(15,15,15,16,16,16, 16,17,17,17), 
       ADO = c(rep("T1", 4), rep("T2", 2), rep("T3", 4))) 

「ID」是特定「ADO」的標籤或類別。每個ADO都應該是唯一的。但在這種情況下它不是:

> table(gg$ID, gg$ADO) 

    T1 T2 T3 
    15 3 0 0 
    16 1 2 1 
    17 0 0 3 

我想分配一個特定的ADO最頻繁的ID。所以,我期望的輸出是:

ID ADO 
1 15 T1 
2 15 T1 
3 15 T1 
4 16 T2 
5 16 T2 
6 16 T2 
7 16 T2 
8 17 T3 
9 17 T3 
10 17 T3 

請指導我可以使用什麼函數來解決這個問題?

+1

http://stackoverflow.com/questions/2547402/is-there-a-built-in-function-for-尋找模式 – Nate

+0

@NathanDay非常感謝! –

+1

一注。您可以通過在第二個參數中輸入'rep'矢量來更簡潔地創建ADO變量:'c(rep(「T1」,4),rep(「T2」,2),rep(「T3」,4)) '會變成'rep(c(「T1」,「T2」,「T3」),c(4,2,4))'。 – lmo

回答

0

這顯示找到的ADO第一模式的單程

do.call("rbind", by(gg, gg$ID, function(x) { tbl <- table(x$ADO); x$ADO <- names(sort(tbl, decreasing = TRUE)[1]); x})) 
#  ID ADO 
# 15.1 15 T1 
# 15.2 15 T1 
# 15.3 15 T1 
# 16.4 16 T2 
# 16.5 16 T2 
# 16.6 16 T2 
# 16.7 16 T2 
# 17.8 17 T3 
# 17.9 17 T3 
# 17.10 17 T3