我有一个看起来像的数据框-

Id  Result
A    1
B    2
C    1
B    1
C    1
A    2
B    1
B    2
C    1
A    1
B    2

现在,我需要为每个Id计算多少个1和2,然后选择出现频率最大的数字。
Id  Result
A    1
B    2
C    1

我怎样才能做到这一点?我尝试以某种方式使用table函数,但无法有效使用它。任何帮助,将不胜感激。

最佳答案

在这里,您可以一步一步使用aggregate:

df <- structure(list(Id = structure(c(1L, 2L, 3L, 2L, 3L, 1L, 2L, 2L,
3L, 1L, 2L), .Label = c("A", "B", "C"), class = "factor"),
Result = c(1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L)),
.Names = c("Id", "Result"), class = "data.frame", row.names = c(NA, -11L)
)

res <- aggregate(Result ~ Id, df, FUN=function(x){which.max(c(sum(x==1), sum(x==2)))})
res

结果:
  Id Result
1  A      1
2  B      2
3  C      1

10-08 17:52