2017-07-17 37 views
1

我在R中有data.frame,其中value列包含類character的數據。我想識別value更改的行號。在下面的例子中,我希望得到4,7和9.有沒有辦法做到這一點沒有循環?確定R data.frame列中的值發生變化

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 

回答

3

一個簡單的解決方案是使用滯後函數在dplyr:

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

可以使用rle(運行長度編碼):

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

可以使用head掉落最後一個值:

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

您需要刪除最後一個值。 – thelatemail

+0

你說得對@thelatemail,謝謝! – HubertL

4

與@ thc的回答類似,但沒有依賴關係:

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