R:计算具有相同值

时间:2015-05-01 18:43:39

标签: r dplyr

我可以访问包含以下内容的数据框:

  • customer_id:50K客户
  • 日期:200个日期(从1到200)
  • nb_visit_life_to_date:客户(今天或过去)完成的生活访问次数。

我需要为每一行计算此日期已知的不活动时间段,即从上次访问到当前行日期的天数。

上次访问的日期可以通过计算具有相同值的先前行数来从nb_visit_life_to_date中推断出来。

例如,如果我有3行关于具有相同生活日期访问次数的同一用户,那么我应该为此第3行恢复2天的非活动期。

真实数据示例:

input <- data.frame(
  user = c(1,1,1,1,1,2,2,2,2,2),
  date = c(1,2,3,4,5,1,2,3,4,5),
  nb_visit_life_to_date = c(1,1,1,2,3,1,2,2,2,2)
)

output <- data.frame(
  input,
  inactivity_period_from_previous_visit = c(0,1,2,0,0,0,0,1,2,3)
)

理想情况下,我想使用dplyr语法,但我当然愿意接受所有解决方案。

1 个答案:

答案 0 :(得分:2)

这是一个简单的rle(运行长度编码)任务:

sequence(rle(input$nb_visit_life_to_date)$lengths) - 1
#  [1] 0 1 2 0 0 0 0 1 2 3