Voici un échantillon de booléens je dans le cadre d'un data.frame:Une façon plus élégante de retourner une séquence de nombres basée sur des booléens?
atest <- c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)
Je veux retourner une séquence de nombres commençant à 1 de chaque FAUX et une augmentation de 1 jusqu'à la prochaine FAUX.
Le résultat vecteur souhaité est:
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1
Voici le code qui accomplit, mais je suis sûr qu'il ya une plus simple ou plus élégante façon de le faire dans l'affaire R. Je suis toujours essayer d'apprendre coder les choses plus efficacement dans R plutôt que simplement faire le travail.
result <- c()
x <- 1
for(i in 1:length(atest)){
if(atest[i] == FALSE){
result[i] <- 1
x <- 1
}
if(atest[i] != FALSE){
x <- x+1
result[i] <- x
}
}
Réallocation ("croissante") d'un objet dans une boucle for est un gros no-no dans R. Il s'agit de la chose la plus lente que vous pouvez faire. –
Je sais que j'ai essayé avec un sapply mais je voulais juste sortir la logique de base. Votre solution est exactement ce que je cherchais. – tcash21