2017-03-09 60 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