Buenas:
He creado dos ficheros de datos a partir de los datos que ha puesto para hacer las pruebas:
Si no he entendido mal, el siguiente código hace lo que necesita y sin bucles!!!Leemos los datos:
db_test3 <- read.csv('db_test3.csv', sep = ' ', header = TRUE, quote = "'")
db_test3$controlDc <- as.POSIXct(db_test3$controlDc)
db_test3
db_mindf <- read.csv('db_mindf.csv', sep = ',', header = TRUE, quote = "'")
db_mindf$ccontrolDc <- as.POSIXct(db_mindf$ccontrolDc)
db_mindfComprobamos si cada id está dos veces, el resultado debe ser TRUE
all(table(db_test3$userId) == 2)Ordenamos por fecha
db_test3 <- db_test3[order(db_test3$controlDc),]
db_test3 <- db_test3[order(db_test3$userId),]
db_test3Nos quedamos con los elementos pares
db_test4 <- db_test3[seq(2, nrow(db_test3), 2),]Metemos la fecha del userId en la correspondiente posición del vector fecha. Este paso es el que permite hacer los cálculos sin necesidad de bucles
fecha <- as.POSIXct(numeric(max(db_test3$userId)), origin = "1970-01-01", tz = "UTC")
fecha[db_test4$userId] <- db_test4$controlDc
fechaMetemos la fecha en db_mindf
db_mindf$fecha <- fecha[db_mindf$userId]
db_mindfNos quedamos con la parte de db_mindf con fecha posterior a fecha
db_mindf <- db_mindf[db_mindf$ccontrolDc - db_mindf$fecha > 0, ]Sólo queda contar
tcuenta <- table(db_mindf$userId)
19
2
cuenta <- numeric(max(db_test3$userId))
cuenta[as.numeric(names(tcuenta))] <- tcuenta
cuenta
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0
Un saludo.