4 votes

Identifier où la valeur change dans une colonne de data.frame R

J'ai un data.frame en R où la colonne valeur contient des données de la classe character. Je veux identifier les numéros de ligne où la valeur change. Dans l'exemple ci-dessous, je veux obtenir 4, 7 et 9. Y a-t-il un moyen de le faire sans boucler?

df <- data.frame(ind=1:10,
 valeur=as.character(c(100,100,100,200,200,200,300,300,400,400)), 
 stringsAsFactors=F)
df
   ind valeur
1    1   100
2    2   100
3    3   100
4    4   200
5    5   200
6    6   200
7    7   300
8    8   300
9    9   400
10  10   400

7voto

thelatemail Points 21202

Similaire à la réponse de @thc, mais sans dépendance :

which(c(FALSE, tail(df$value,-1) != head(df$value,-1)))
#[1] 4 7 9

5voto

thc Points 5431

Une solution simple consiste à utiliser la fonction lag dans dplyr :

which(df$value != dplyr::lag(df$value))

3voto

HubertL Points 5204

Vous pouvez utiliser rle (Encodage de Longueur de Course):

cumsum(rle(df$value)$lengths)+1
[1]  4  7  9 11

Vous pouvez utiliser head pour supprimer la dernière valeur:

head(cumsum(rle(df$value)$lengths)+1, -1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X