-3
votes

Comment supprimer des lignes basées sur une plage de temps dans R? Données Picarro

J'ai un fichier de données qui ressemble à ceci: xxx

Je veux supprimer les 2 premières secondes de chaque ligne à chaque fois que la valeur de la vanne change, mais je n'ai aucune idée de la façon de faire ça .

Je veux que ma sortie ressemble à quelque chose comme ceci: xxx


3 commentaires

Qu'entendez-vous par «les 2 premières secondes de chaque ligne?» Je ne vois qu'un horodatage chaque rangée. Pourriez-vous ajouter le résultat attendu?


Vous pouvez utiliser: dplyr :: Mutate () , dplyr :: Case_Quend () , dplyr :: plomb () et :: remplir ()


@Valentino J'ai ajouté un résultat attendu, désolé pour cela.


3 Réponses :


2
votes

Les éléments suivants doivent fonctionner xxx


3 commentaires

Cela ne fonctionnerait pas pour Valve = 2 dans les 3 dernières lignes séparément en tant que op mentionne chaque fois que la valeur de la vanne change . Vous devez probablement utiliser rleid aussi.


Merci de pointer sur @ronakshah, je modifierai la réponse en utilisant rleid


La chose est qu'il doit être une suppression basée sur le temps. Vous verrez, la trame de données que je décrise dans la question est une simplification excessive et les deux premières secondes ne sont pas toujours des deux premières lignes. Je m'excuse de ne pas clarifier cela dans la question.



2
votes

Sur la base des données montrées, nous pouvons supposer que vous avez une lecture chaque seconde. Nous pouvons utiliser rleid code> à partir de data.Table code> pour créer des groupes et supprimer les deux premières lignes de chaque groupe.

df <- structure(list(TIME = c("10:06:05", "10:06:06", "10:06:07", 
"10:06:08", "10:06:09", "10:06:10", "10:06:11", "10:06:12", "10:06:13", 
"10:06:14", "10:06:15", "10:06:16", "10:06:17", "10:06:18", 
"10:06:19"), VALVE = c("2", "2", "2", "2", "2", "3", "3", "3", "3", 
"4", "4", "4", "2", "2", "2")), row.names = c(NA, -15L), class = 
"data.frame")


0 commentaires

-1
votes

Alors, j'ai résolu mon problème en utilisant, dplyr :: group_by et dplyr :: Mutate et dplyr :: filtre basé sur ce post sur Github .

J'ai d'abord créé une nouvelle colonne et l'a attribué un numéro pour chaque fois qu'une vanne modifiée xxx

qui me donnerait quelque chose comme ça xxx

Puis je:

  1. le commandé en fonction de l'heure,
  2. le regroupé par Samplenums
  3. Créer une colonne nommée ELAPSED_SECONDS
  4. Calculez le temps écoulé pour chaque samplenums en secondes
  5. puis filtrez chaque valeur ELAPSED_SECOND inférieure à 2.

    comme ceci: xxx

    et obtenez quelque chose comme ceci: xxx

    espère que cela aide.

    (putain! Je passe plus de temps en formatage de cette réponse que de travailler sur ce DF, quoi de neuf avec ça !?)


0 commentaires