从R数据集

时间:2017-04-04 16:06:40

标签: r

我有一个包含日期和客户名称的数据框。我希望添加一个返回的日期,这是客户下次返回我的数据集时。在R中最简单的方法是什么?如果客户尚未返回,则结果应为空白。

Date <-seq(as.Date('2017/01/01'), as.Date('2017/01/9'), by="day")
Cust <- c("A","B","C","A","B","C","A","B","C")
df1 <- data.frame(Date,Cust)

    Date    Cust
1   01/01/17    A
2   02/01/17    B
3   03/01/17    C
4   04/01/17    A
5   05/01/17    B
6   06/01/17    C
7   07/01/17    A
8   08/01/17    B
9   09/01/17    C

预期结果

    Date    Cust    returnedDate
1   01/01/17    A   04/01/17
2   02/01/17    B   05/01/17
3   03/01/17    C   06/01/17
4   04/01/17    A   07/01/17
5   05/01/17    B   08/01/17
6   06/01/17    C   09/01/17
7   07/01/17    A   NA
8   08/01/17    B   NA
9   09/01/17    C   NA

1 个答案:

答案 0 :(得分:2)

我们可以使用shift data.table操作中的小组来执行此操作。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df1)),按&#39; Cust&#39;分组,获得&#39;日期&#39;的主要值并将(:=)指定为&#39; returnDate&#39;

library(data.table)
setDT(df1)[, returnDate := shift(Date, type = "lead"), Cust]
df1
#         Date Cust returnDate
#1: 2017-01-01    A 2017-01-04
#2: 2017-01-02    B 2017-01-05
#3: 2017-01-03    C 2017-01-06
#4: 2017-01-04    A 2017-01-07
#5: 2017-01-05    B 2017-01-08
#6: 2017-01-06    C 2017-01-09
#7: 2017-01-07    A       <NA>
#8: 2017-01-08    B       <NA>
#9: 2017-01-09    C       <NA>

注意:如果OP希望“约会”采用某种格式,请使用format