我可能会探索该data.table
软件包,但没有更多详细信息,以下示例解决方案很可能 不是 您需要的。我提到这一点是因为,特别是,每组匹配的“评分”记录可能不止一个max
;你想如何处理这些案件?
library(data.table)
temp <- read.table(header = TRUE, stringsAsFactors=FALSE,
text = "Website Datetime Rating
A 2012-10-9 10
A 2012-11-10 12
B 2011-10-9 5")
DT <- data.table(temp, key="Website")
DT
# Website Datetime Rating
# 1: A 2012-10-9 10
# 2: A 2012-11-10 12
# 3: B 2011-10-9 5
DT[, list(Datetime = Datetime[which.max(Rating)],
Rating = max(Rating)), by = key(DT)]
# Website Datetime Rating
# 1: A 2012-11-10 12
# 2: B 2011-10-9 5
我建议为了获得更好的答案,您可能希望包含诸如日期时间变量如何影响您的聚合之类的信息,或者每个组是否可能有多个“最大值”值。
如果您想要与最大值匹配的所有行,则修复很容易:
DT[, list(Time = Times[Rating == max(Rating)],
Rating = max(Rating)), by = key(DT)]
如果您确实只想要该Rating
专栏,那么有很多方法可以解决这个问题。按照与上述相同的步骤转换为 a data.table
,尝试:
DT[, list(Datetime = max(Rating)), by = key(DT)]
Website Datetime
# 1: A 4
# 2: B 2
# 3: C 5
或者,保持原来的 "temp" data.frame
,尝试aggregate()
:
aggregate(Rating ~ Website, temp, max)
Website Rating
# 1 A 4
# 2 B 2
# 3 C 5
另一种方法,使用ave
:
temp[with(temp, Rating == ave(Rating, Website, FUN=max)), ]