saisir des nombres séquentiels sans fin spécifique dans la colonne d'un bloc de données dans r
-
21-12-2019 - |
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
}
}
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)
}