0
votes

"Si" avec deux erreurs de conditions

J'essaie d'obtenir la ligne exacte où $ last_200_low code> change de colonne et 3 rangées derrière a la même valeur de la ligne réelle. J'ai 2 erreurs différentes et une solution qui stimule presque le problème. Tous les conseils?

 if (diff(df$last_200_low[i]) != 0 & df$last_200_low[i] == df$last_200_low[i - 3]) {
     print(df[i])
     i <- i + 1
 }

Error in if (diff(df$last_200_low[i]) != 0 & df$last_200_low[i] ==  : 
  argument is of length zero


1 commentaires

Juste pour référence, des itérations de boucle de style C ne sont pas nécessaires (n'ont pas besoin de déclarer «i» ni 'i = i + 1')


4 Réponses :


3
votes

Pour obtenir un vecteur égal à la longueur de votre data.frame.frame code>, vous pouvez combiner avec un problème logique: xxx pré>

Le problème avec le second est quelque peu similaire. DF [I-3,] Code> évaluera à DF [-2,] code> ce que vous voulez. Voir le retour: P>

DF <- data.frame(ID = 4070:4077, last_200_low = c(rep(3200.5,4), 3200.0, 3199.5, 3199.0, 3198.5))
n_lag <- 3

DF[c(diff(DF$last_200_low) !=0, FALSE) 
   & c(rep(FALSE, n_lag), diff(DF$last_200_low, lag = n_lag) == 0)
   , ]

    ID last_200_low
4 4073       3200.5


0 commentaires

0
votes

Mise à jour 1

a mal interprété la question, alors modifiant pour montrer la dernière des valeurs correspondantes comme demandé. p>

échantillon Data: p>

df <- structure(list(data_hora = structure(c(1L, 1L, 1L, 2L, 3L), .Label = c("2018-02-01 09:39:20", 
"2018-02-01 09:39:23", "2018-02-01 09:39:24"), class = "factor"), 
    last_200_low = c(3200.5, 3200.5, 3200.5, 3200, 3199.5)), class = "data.frame", row.names = c(NA, 
-5L))


0 commentaires

0
votes

Vous pouvez obtenir ce que vous voulez à l'aide de données.Table et la fonction de décalage: xxx

code simple et en ligne! J'espère que cela aide!


0 commentaires

0
votes

Utilisation de données.Table:

library('data.table')
func <- function(dt) unique(dt[, .(N = .N), by = data_hora][N >= 3]$data_hora)
dt[c(diff(last_200_low),0) != 0 & data_hora %in% func(dt)]


0 commentaires