Question

Je voudrais donner une séquence de nombres à une nouvelle colonne d'un bloc de données.Mais cette séquence se répétera plusieurs fois en fonction d'une valeur dans une autre colonne.(c'est-à-dire qu'il commence à partir de 1 jusqu'à ce que cette valeur spécifique soit remplacée par une autre valeur).

Mon problème est de savoir comment définir le point final de chaque séquence dans r.

Une partie de mon data frame avec la colonne "V2" que je compte ajouter :

  V1      V2(new added column with sequential numbers)           
  12      1
  12      2
  12      3
  12      4
  12      5
  13      1
  13      2
  13      3
  13      4
  13      5
  13      6
  14      1
  14      2
  14      3
  14      4

J'ai essayé d'utiliser le code suivant, qui ne fonctionnait pas !

count <- table(df$V1)
c <- as.integer(names(count)[df$V1==12])
    repeat{
      df$V2<- seq(1,c, by=1)
      if(df$V1!=12){
        break
      }
    }
Était-ce utile?

La solution

Il semble que vous cherchiez rle puisque tu es intéressé à tout moment par la variable "V1" changements.

Essayez ce qui suit :

> sequence(rle(df$V1)$lengths)
 [1] 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4

Autres conseils

rle est une très bonne solution, mais vous pourriez également avoir utilisé AVE:

tab$V2 <- ave(tab$V1, tab$V1, FUN=seq_along)

htth

Bien Ananda bat mon effort:

vec = numeric(0)
for(i in unique(df$V1)){
  n = length(df$V1[df$V1 == i])
  vec = c(vec, 1:n)
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top