如何以每行的模式(最常见)值聚合R中的数据?

dsa*_*uce 2 aggregate r

例如,我有一个数据集

Data <- data.frame(
  groupname = as.factor(sample(c("a", "b", "c"), 10, replace = TRUE)),
  someuser = sample(c("x", "y", "z"), 10, replace = TRUE))


   groupname someuser
1          a        x
2          b        y
3          a        x
4          a        y
5          c        z
6          b        x
7          b        x
8          c        x
9          c        y
10         c        x
Run Code Online (Sandbox Code Playgroud)

如何汇总数据,以便获得:

groupname someuser
a         x
b         x
c         x
Run Code Online (Sandbox Code Playgroud)

这是每个组名最常见的值。

PS:根据我的设置,我只能使用2个包-plyr和lubridate

H 1*_*H 1 5

您可以结合使用此功能来查找聚合模式。

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

aggregate(someuser ~ groupname, Data, Mode)

  groupname someuser
1         a        x
2         b        x
3         c        x
Run Code Online (Sandbox Code Playgroud)

请注意,如果出现平局,它将仅返回第一个值。