这是我的问题,我有一系列与日期和多天时间匹配的变量。我想浏览整个列表,首先找到每天的最大值,然后将其与相应的时间和日期一起打印出来。 这是迄今为止我所拥有的。
for (i in 1:numDays)
{
temp <- which(test[[i]]$Date == numDays[i])
temp <- test[[i]][temp,]
High[rowCnt, (i-2)+2] <- max(temp$High)
rowCnt <- rowCnt + 1
}
有什么建议吗?
感谢 例如:
Day Time Valeue
x 5 0
x 6 1
x 7 2
x 8 3
y 1 12
y 2 0
y 3 1
y 4 5
所以这应该返回:
day time value
x 8 3
y 1 12
答案 0 :(得分:2)
temp[ with( temp, ave(Valeue, Day, FUN=max) ) == temp$Valeue , ]
#--------------
Day Time Valeue
4 x 8 3
5 y 1 12
这是一个制作逻辑向量的示例,该向量跨越所选数据帧的行数。
答案 1 :(得分:1)
使用by
例如:
do.call(rbind,by(test,test$Day,
function(x) x[which.max(x$Value),]))
Day Time Value
x x 8 3
y y 1 12
答案 2 :(得分:0)
只是为了好玩:
merge(dat, aggregate(Valeue ~ Day, dat, max) )
# Day Valeue Time
#1 x 3 8
#2 y 12 1
如果您缺少值(同样的逻辑适用于@Dwin的答案的FUN=
部分)
merge(dat, aggregate(Valeue ~ Day, dat, max, na.rm=TRUE) )
答案 3 :(得分:0)
另一种方式:
# Dummy Data
dat <- data.frame(
day=sample(c("x","y"),10,replace=TRUE),
time=sample(1:10),
value=sample(1:10))
# Find location of maxima in each column, subset by locations
dat[sapply(dat[2:3],which.max),]