如果我有一个如下所示的数据框:
id=c(1,1,1,2,2,3,3,3,3)
ans=c(1,1,3,3,3,4,3,1,4)
d=cbind(id,ans)
如何为每个ID选择最常用的答案?
我想返回一个如下所示的数据框:
id=c(1,2,3)
ans=c(1,3,4)
d.out=cbind(id,ans)
答案 0 :(得分:3)
这个怎么样?
res <- sapply(split(ans, id), function(x) names(sort(table(x),decreasing=TRUE)[1]))
data.frame(id = names(res), ans = res)
id ans
1 1 1
2 2 3
3 3 4
答案 1 :(得分:3)
您需要一个双向表,然后找到每行中的最大数量:
tab <- table(id, ans)
data.frame(id=rownames(tab), ans=colnames(tab)[max.col(tab)])