Durée de "ON" de capteur

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Diakaria Korera
Messages : 18
Enregistré le : 07 Juin 2018, 15:51

Durée de "ON" de capteur

Messagepar Diakaria Korera » 08 Juin 2018, 09:27

Bonjour,
Je travaille sur de données de capteurs et je suis confronté à un problème. Je veux savoir combien durent les modes détection de mes capteurs de mouvements. Ma table se présente comme suit:

Code : Tout sélectionner

tab <- structure(list(
Date = structure(1:15, .Label = c("2018-05-18 14:59:15", "2018-05-18 14:59:43", "2018-05-18 15:00:00", "2018-05-18 15:00:01", "2018-05-18 15:00:10", "2018-05-18 15:00:11", "2018-05-18 15:00:54","2018-05-18 15:00:58","2018-05-18 15:00:59","2018-05-18 15:01:24","2018-05-18 15:01:49","2018-05-18 15:01:50","2018-05-18 15:01:52","2018-05-18 15:02:37","2018-05-18 15:05:00"), class = "factor"),
Capteur.1 = structure(c(2L, 2L, 2L, 2L, 1L, 1L,2L, 2L, 2L, 2L,2L, 2L,1L, 1L,1L), .Label = c("OFF", "ON"), class = "factor"),
Capteur.2 = structure(c(2L, 2L, 2L, 2L,2L,1L,2L, 2L, 2L, 2L,2L,1L, 1L,1L, 1L), .Label = c("OFF", "ON"), class = "factor")),
.Names = c("Date","Capteur.1", "Capteur.2"), class = "data.frame", row.names = c(NA,-15L))
 
tab$Date <- as.POSIXct(tab$Date, format = "%d-%m-%Y %H:%M:%S")



Mon souci est que j'aimerai calculer la durée de chaque événement "ON" de mes capteurs.
Par exemple:
-Pour le capteur 1, j'aurai: 46 sec, 56 sec
-Pour le capteur 2, j'aurai: 55 sec, 55 sec
Merci
Diakaria
Université Claude Bernard Lyon1

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Durée de "ON" de capteur

Messagepar Pierre-Yves Berrard » 08 Juin 2018, 10:00

Bonjour,

Un exemple pour le capteur 1 (pour automatiser sur plusieurs capteurs, il faudra peut-être réorganiser les données).

Création d'un identifiant pour chaque séquence de ON ou OFF.

Code : Tout sélectionner

rle1 <- rle(as.character(tab$Capteur.1))
tab$ID_C1 <- rep(seq_along(rle1$lengths), rle1$lengths)

Calcul des durées : pour chaque séquence, premier horodatage soustrait du dernier horodatage.

Code : Tout sélectionner

durees_C1 <-
  aggregate(
    Date ~ ID_C1,
    data = subset(tab, Capteur.1 == "ON"), # données restreintes aux "ON"
    FUN = function(x) x[length(x)] - x[1]
  )

Résultat :

Code : Tout sélectionner

  ID_C1 Date
1     1  46
2     3  56

PS : le format de conversion en date n'est pas bon dans votre code, il faut remplacer par "%Y-%m-%d %H:%M:%S"
PY

Diakaria Korera
Messages : 18
Enregistré le : 07 Juin 2018, 15:51

Re: Durée de "ON" de capteur

Messagepar Diakaria Korera » 08 Juin 2018, 10:41

Merci Pierre-Yves !
Effectivement ça me donne ce que je veux et merci pour le format de la date. :)
Diakaria
Université Claude Bernard Lyon1

Diakaria Korera
Messages : 18
Enregistré le : 07 Juin 2018, 15:51

Re: Durée de "ON" de capteur

Messagepar Diakaria Korera » 18 Juin 2018, 14:33

Rebonjour Pierre-Yves Berrard,
Je reviens vers vous pour un coup de pouce. En fait après analyse de mes boxplots je me rends compte que la durée d'un doit correspondre à la différente entre le premier ON et le premier OFF au lieu de la différence entre le premier ON et le dernier ON.
Du coup j'ai essayé de modifier le code mais ça ne marche pas car j'essaie de transformer tous les premier ID_C correspondant à la notification OFF en ID_C qui les précédent
Merci !
Diakaria
Université Claude Bernard Lyon1

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Durée de "ON" de capteur

Messagepar Pierre-Yves Berrard » 20 Juin 2018, 08:24

Est-ce qu'une colonne capteur commence toujour pas ON et finit toujours pas OFF ?
PY

Diakaria Korera
Messages : 18
Enregistré le : 07 Juin 2018, 15:51

Re: Durée de "ON" de capteur

Messagepar Diakaria Korera » 21 Juin 2018, 10:12

Non, une colonne capteur peut commencer par ON ou par OFF.
Donc si elle commence par ON c'est à cet instant que je considère qu'un capteur vient détecter un mouvement et il se met en mode aveugle à partir du premier OFF.
Merci
Diakaria
Université Claude Bernard Lyon1

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Durée de "ON" de capteur

Messagepar Pierre-Yves Berrard » 21 Juin 2018, 11:34

On peut intégrer le premier OFF qui suit à chaque groupe de ON en ajoutant une instruction (mapply...) lors de la création d'un identifiant :

Code : Tout sélectionner

rle1 <- rle(as.character(tab$Capteur.1))

rle1$lengths <-
  mapply(
    function(len, val) ifelse(val == "ON", len + 1, len - 1),
    rle1$lengths,
    rle1$values
  )
 
tab$ID_C1 <- rep(seq_along(rle1$lengths), rle1$lengths)

durees_C1 <-
  aggregate(
    Date ~ ID_C1,
    data = tab, # garde tout le monde contrairement à avant
    FUN = function(x) x[length(x)] - x[1]
  )

A l'air de fonctionner pour l'exemple fourni, mais pas sûr pour des cas plus exotiques.
PY

Diakaria Korera
Messages : 18
Enregistré le : 07 Juin 2018, 15:51

Re: Durée de "ON" de capteur

Messagepar Diakaria Korera » 22 Juin 2018, 08:20

Merci infiniment Pierre-Yves :)
Diakaria
Université Claude Bernard Lyon1


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité