需要在数据框中找到列数的最大值并按天分组。这是它拥有的样本数据:
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,或者具有时间戳格式值。答案 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