我有一个看起来像的数据框-
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