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

如何使用模式(最常见)值为每行聚合R中的数据?,r,aggregate,R,Aggregate,例如,我有一个数据集 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

例如,我有一个数据集

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
这是每个groupname最常见的值


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

这可能适合您-使用base R

set.seed(1)
Data <- data.frame(
  groupname = as.factor(sample(c("a", "b", "c"), 10, replace = TRUE)),
  someuser = sample(c("x", "y", "z"), 10, replace = TRUE))
Data
   groupname someuser
1          a        x
2          b        x
3          b        z
4          c        y
5          a        z
6          c        y
7          c        z
8          b        z
9          b        y
10         a        z

res <- lapply(split(Data, Data$groupname), function(x) 
  data.frame(groupname=x$groupname[1], someuser=names(sort(table(x$someuser),
             decreasing=TRUE))[1]))

do.call(rbind, res)
  groupname someuser
a         a        z
b         b        z
c         c        y
您可以将其结合起来查找具有聚合的模式

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

模式有很多选项。这里我们使用
来计算频率,并使用
哪个.max
来选择发生的最大值。在
数据表中
框架:

library(data.table)
setDT(Data)[,list(someuser={
  tt <- table(someuser)
  names(tt)[which.max(tt)]
}),groupname]

为什么会有这些限制?这是一个家庭作业吗?不,我正在通过excel自动化它,不能通过R为excel编程来安装新的软件包
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
library(data.table)
setDT(Data)[,list(someuser={
  tt <- table(someuser)
  names(tt)[which.max(tt)]
}),groupname]
library(plyr)
ddply(Data,.(groupname),summarize,someuser={
  tt <- table(someuser)
  names(tt)[which.max(tt)]
})