【问题标题】:Using R to find max value for loop使用 R 查找循环的最大值
【发布时间】:2013-08-06 01:56:41
【问题描述】:

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

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

【问题讨论】:

  • 一些数据可以使用并显示您想要的输出会很好。

标签: r


【解决方案1】:
temp[ with( temp, ave(Valeue, Day, FUN=max) ) == temp$Valeue , ] 
#--------------
  Day Time Valeue
4   x    8      3
5   y    1     12

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

【讨论】:

    【解决方案2】:

    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循环中吗?真正的编码新手
    • 它用 NA 填充我的答案。有什么建议吗?
    • 例如,您应该删除缺失值。 test &lt;- test[complete.cases(test),] 然后调用我的代码...
    【解决方案3】:

    只是为了好玩:

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

    【讨论】:

      【解决方案4】:

      另一种方式:

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

      【讨论】:

        猜你喜欢
        • 2018-09-21
        • 2016-12-15
        • 2021-06-17
        • 2013-10-05
        • 2022-09-29
        • 1970-01-01
        • 2019-09-18
        • 2018-03-06
        • 1970-01-01
        相关资源
        最近更新 更多