使用R语言找到循环中的最大值

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

2
提供一些数据并展示您期望的输出会更好。 - Arun
4个回答

2
使用“by”作为例子:

使用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

这个要放在 for 循环里面吗?我对编程真的很新。 - Junior R
它正在用NAs填充我的答案。有什么建议吗? - Junior R
你应该删除缺失值。例如, test <- test[complete.cases(test),] 然后调用我的代码... - agstudy

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

这是一个例子,展示如何创建一个逻辑向量,该向量包含所选数据框的行数。


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) )

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),]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接