2017-03-09 58 views
0

列的值改變我想建立一個「段」 ID,以便:創建基於增量值的ID值時作爲R

  1. 如果該值(在一列中)是相同的行你保持相同的段ID之前
  2. 然而,如果該值(一列)比段ID增量之前的行相差一個

我目前正在努力實現這一目標通過:

require(dplyr) 
person <- c("Mark","Mark","Mark","Mark","Mark","Steve","Steve","Tim", "Tim", "Tim","Mark") 
df <- data.frame(person,stringsAsFactors = FALSE) 
df$segment = 1 

df$segment <- ifelse(df$person == dplyr::lag(df$person),dplyr::lag(df$segment),dplyr::lag(df$segment)+1) 

但我沒有通過這種方法獲得所需的結果。

任何幫助,將不勝感激

+1

那麼什麼是所需的輸出?最後一個標記是否與第一個標記具有相同的值? – MrFlick

回答

1

一個基礎R解決方案可能是這樣的

c(1, cumsum(person[-1] != person[-length(person)]) +1) 
[1] 1 1 1 1 1 2 2 3 3 3 4 
1

如果你想上的變化增加,試試這個

df %>% mutate(segment = cumsum(person != lag(person, default=""))) 
# person segment 
# 1 Mark  1 
# 2 Mark  1 
# 3 Mark  1 
# 4 Mark  1 
# 5 Mark  1 
# 6 Steve  2 
# 7 Steve  2 
# 8  Tim  3 
# 9  Tim  3 
# 10 Tim  3 
# 11 Mark  4