2016-11-25 60 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