3

这是我的问题,我有一系列与日期和多天时间匹配的变量。我想浏览我的整个列表,首先找到每天的最大值,然后将其与相应的时间和日期一起打印。继承人我到目前为止。

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
4

4 回答 4

2
temp[ with( temp, ave(Valeue, Day, FUN=max) ) == temp$Valeue , ] 
#--------------
  Day Time Valeue
4   x    8      3
5   y    1     12

这是一个创建逻辑向量的示例,该向量跨越被选择的数据帧的行数。

于 2013-08-06T03:57:47.973 回答
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
于 2013-08-06T02:05:59.003 回答
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),]
于 2013-08-06T05:35:28.423 回答
0

只是为了好玩:

merge(dat, aggregate(Valeue ~ Day, dat, max) )

#  Day Valeue Time
#1   x      3    8
#2   y     12    1

如果您有缺失值(相同的逻辑适用于FUN=@Dwin 的部分答案)

merge(dat, aggregate(Valeue ~ Day, dat, max, na.rm=TRUE) )
于 2013-08-06T05:28:16.397 回答