2017-07-17 7 views
1

Ich habe eine data.frame in R, wo die value Spalte enthält Daten der Klasse character. Ich möchte die Zeilennummern identifizieren, in denen sich value ändert. Im folgenden Beispiel möchte ich 4, 7 und 9 herausbringen. Gibt es eine Möglichkeit, dies ohne Schleifen zu tun?Identifizieren, wo Wert in R data.frame Spalte

df <- data.frame(ind=1:10, 
value=as.character(c(100,100,100,200,200,200,300,300,400,400)), 
stringsAsFactors=F) 
df 
    ind value 
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 

Antwort

3

Eine einfache Lösung ist es, die Verzögerungsfunktion in dplyr zu verwenden:

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

können Sie verwenden rle (Run Length Encoding):

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

Sie können head verwenden die fallen letzter Wert:

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

Sie müssen den letzten Wert fallen. – thelatemail

+0

Sie haben Recht @ thelatemail, Danke! – HubertL

4

Ähnlich @ thc Antwort, aber ohne Abhängigkeit:

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