在R中每天查找数据框中列的最大值

时间:2014-08-06 14:32:32

标签: r

需要在数据框中找到列数的最大值并按天分组。这是它拥有的样本数据:

Date               count
7/28/2014 00:30:31  95
7/28/2014 01:30:57  62
7/28/2014 15:42:42  112
7/28/2014 15:42:42  150
7/31/2014 17:12:22  12
7/31/2014 04:45:47  97
8/2/2014  21:12:06  85
8/2/2014 23:05:09   96
8/2/2014 18:17:42   48
8/2/2014 19:53:02   89
8/2/2014 14:18:38   201

我的要求是找到计数的最大值。怎么能在R?

中完成 抱歉,我忘了提。 date列的数据类型为timestamp,或者具有时间戳格式值。

4 个答案:

答案 0 :(得分:3)

假设您的数据位于名为data.frame的{​​{1}}中,您可以使用bar

by()

答案 1 :(得分:2)

有很多方法可以做到这一点,基础R的另一个选择是使用aggregate(假设您的数据被称为dat):

aggregate(count ~ Date, data = dat, max)
#       Date count
#1 7/28/2014   150 
#2 7/31/2014    97
#3  8/2/2014   201

使用包dplyr,以防您拥有大量数据并需要更快的速度:

library(dplyr)

dat %>% group_by(Date) %>% summarize(maxCount = max(count))
#Source: local data frame [3 x 2]
#
#       Date maxCount
#1 7/28/2014      150
#2 7/31/2014       97
#3  8/2/2014      201

答案 2 :(得分:1)

data.table用于更大的数据集

 library(data.table)
 setDT(dat)[, list(maxCount=max(count)), by=Date]
 #        Date maxCount
 #1: 7/28/2014   150
 #2: 7/31/2014    97
 #3:  8/2/2014   201

略大一些数据集的基准

set.seed(455)
dat1 <- data.frame(group=sample(1:5000, 1e7, replace=TRUE), count=sample(200, 1e7, replace=TRUE))

f1<- function() dat1 %>% group_by(group) %>% summarize(maxCount = max(count))

f2 <- function() setDT(dat1)[, list(maxCount=max(count)), by=group]
library(microbenchmark)
microbenchmark(f1(),f2(), unit="relative")
# expr      min       lq   median       uq      max neval
# f1() 1.914458 2.049166 2.221317 2.256047 2.888778   100
# f2() 1.000000 1.000000 1.000000 1.000000 1.000000   100

答案 3 :(得分:0)

tapply具有简单的语法并提供清晰的表格输出:

with(ddf, tapply(count, Date, max))
7/28/2014 7/31/2014  8/2/2014 
      150        97       201