按计数汇总r

时间:2017-03-29 12:14:38

标签: r count aggregate frequency

我有一个数据集如下:

Group   Class
  A       1
  A       2
  A       1
  A       1
  B       2
  B       2
  B       2
  B       1
  B       3
  B       1
  C       1
  C       1
  C       1
  C       2
  C       3

我想通过'Group'列聚合表,'Class'列上的值将是具有最大计数的Class。例如,对于组A,1出现三次,因此Class的值为1.类似地,对于组2,2出现三次,因此Class的值为2.结果表应如下所示:

Group   Class
  A       1
  B       2
  C       1

我是R编程的新手,非常感谢您帮助我解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

您也可以在不使用<div class="background-image"></div> <div class="content"> Your text </div> 的情况下执行此操作,因此请改用aggregatetable

max.col

这似乎更快:

tb <- table(df$Group, df$Class)
data.frame("Group"=rownames(tb), "CLass"=max.col(tb))

#  Group CLass
#1     A     1
#2     B     2
#3     C     1
library(microbenchmark)

# by Ronak Shah in comments
f1 <- function(df) aggregate(Class~Group, df, function(x) which.max(table(x))) 
# this answer
f2 <- function(df) {tb <- table(df$Group, df$Class);
 data.frame("Group"=rownames(tb), "CLass"=max.col(tb));}

all(f1(df)==f2(df))
# [1] TRUE

microbenchmark(f1(df), f2(df))

# Unit: microseconds
   # expr     min       lq     mean   median      uq      max neval
 # f1(df) 800.153 838.9130 923.6484 870.0115 918.988 1981.901   100
 # f2(df) 298.367 319.0995 353.4915 338.6305 380.246  599.439   100