【问题标题】:Create a ID value based on an incremental value when a value in a column changes in R [duplicate]当R中的列中的值发生变化时,根据增量值创建一个ID值[重复]
【发布时间】:2017-03-09 21:13:44
【问题描述】:

我想创建一个“段”ID,以便:

  1. 如果值(在一列中)与您保持相同段 ID 之前的行相同
  2. 但是,如果值(在一列中)与段 ID 递增 1 之前的行不同

我目前正在尝试通过以下方式实现这一目标:

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)

但是通过这种方法我没有得到想要的结果。

任何帮助将不胜感激

【问题讨论】:

  • 那么想要的输出是什么?最后一个标记的值是否与第一个标记相同?

标签: r dplyr


【解决方案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

【讨论】:

    【解决方案2】:

    基本 R 解决方案可能如下所示

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

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多