【发布时间】:2016-04-28 17:22:42
【问题描述】:
这就是我的数据框的样子。最右边的列(“TimeForLevelChange”)是我想要的列。当给定名称的级别发生更改时,我想从前一个级别获取最小日期,并从级别更改发生的行中获取日期并计算差异。所以在第三排,John 的等级从 1 变为 2,他在 1 级停留了 16 天(2016-01-17 - 2016-01-01),然后才变为 2 级。
library(data.table)
dt <- fread('
Name Level Date RecentLevelChange TimeForLevelChange
John 1 2016-01-01 NA NA
John 1 2016-01-10 NA NA
John 2 2016-01-17 1->2 16
John 2 2016-01-18 NA NA
John 3 2016-01-22 2->3 5
John 4 2016-01-26 3->4 4
John 4 2016-01-27 NA NA
John 7 2016-01-29 4->7 3
Tom 1 2016-01-10 NA NA
Tom 2 2016-01-17 1->2 7
Tom 2 2016-01-18 NA NA
Tom 3 2016-01-22 2->3 5
Tom 4 2016-01-26 3->4 4
Tom 4 2016-01-27 NA NA
Tom 7 2016-01-29 4->7 3
')
dt[, Date := as.IDate(Date)]
我可以在 data.table 中使用 shift 函数,但我不知道如何为给定名称定义上一级的最小日期。
【问题讨论】:
标签: r data.table dplyr zoo