R for loop not working

后端 未结 3 1485
予麋鹿
予麋鹿 2020-12-22 08:41

I\'m trying to use R to find the max value of each day for 1 to n days. My issue is there are multiple values in each day. Heres my code. After I run it incorrect number of

3条回答
  •  忘掉有多难
    2020-12-22 09:04

    Here is the solution using plyr package

    mydata<-structure(list(Day = structure(c(2L, 2L, 2L, 2L, 3L, 3L, 3L, 
    3L), .Label = c("", "x", "y"), class = "factor"), Value = c(0L, 
    1L, 2L, 3L, 12L, 0L, 1L, 5L), Time = c(5L, 6L, 7L, 8L, 1L, 2L, 
    3L, 4L)), .Names = c("Day", "Value", "Time"), row.names = c(NA, 
    8L), class = "data.frame")
    library(plyr)
    ddply(mydata,.(Day),summarize,max.value=max(Value))
    
      Day max.value
    1   x         3
    2   y        12
    

    Updated1: If your day is say 10/02/2012 12:00:00 AM, then you need to use:

    mydata$Day<-with(mydata,as.Date(Day, format = "%m/%d/%Y"))
    ddply(mydata,.(Day),summarize,max.value=max(Value))
    

    Please see here for the example.

    Updated2: as per new data: If your day is like the one you updated, you don't need to do anything. You can just use the code as following:

        mydata1<-structure(list(Day = c(20130310L, 20130310L, 20130310L, 20130310L, 
        20130311L, 20130311L, 20130311L, 20130311L), Time = structure(c(1L, 
        2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("9:30:00", "9:31:00", 
        "9:32:00", "9:33:00"), class = "factor"), Value = c(5L, 1L, 2L, 
        3L, 12L, 0L, 1L, 5L)), .Names = c("Day", "Time", "Value"), class = "data.frame", row.names = c(NA, 
        -8L))
    
    
    
    ddply(mydata,.(Day),summarize,Time=Time[which.max(Value)],max.value=max(Value))
           Day    Time max.value
    1 20130310 9:30:00         5
    2 20130311 9:30:00        12
    

    If you want the time to appear in the output, then just use Time=Time[which.max(Value)] which gives the time at the maximum value.

提交回复
热议问题