mercredi 11 octobre 2017

Trying to add a new row based on a check in R

I have a data set that looks like this:

library(dplyr)
library(lubridate)
s <- c(1,1,1)
r <- c("2017-01-01 12:34:17", "2017-01-01 12:52:18", "2017-01-01 13:17:18")
t <- c(1,1,1)
g <- as.data.frame(matrix(c(s, as.POSIXct(r), t), nrow = 3, ncol = 3))
names(g) <- c("DeviceId", "Time", "Success/Fail")
g$Time <- as.POSIXct(g$Time, origin = '1970-01-01')

I am trying to write a function that loops through the data set and checks to see if the row and its successor's Time are more than 15 minutes apart. Then, the loop would add a row to the data set with the same DeviceId, the row's time plus 15 minutes, and 0 in the Success/Fail column. Here's what I've come up with:

f <- function(g) {
  for(i in 2:nrow(g)) {
    if(g$Time[i] - g$Time[i-1] >= 15) {
      q <- list(g$DeviceId[i-1], g$Time[i-1] + minutes(15), 0)
      y <- data.frame()
      y <- rbind(g, q)
      arrange(y, Time)
    } else NULL
  }
}  


f(g)

Aucun commentaire:

Enregistrer un commentaire