2017-09-17 52 views
-3

我想计算两个日期之间的差异并将+ 1加到结果列中。我有一个大的数据集。我该如何执行此操作?Dplyr mutate将+1加到列

library(dplyr) 

diff <- df %>% mutate(diff = as.character(as.Date(date1, format = "%m/%d/%Y") - as.Date(date2, format = "%m/%d/%Y"))) 

已经执行的日期2减去日期1和想补充+ 1本栏

+1

你想要在同一列吗?如果是这样,请与您现有的mutate语句内联。如果添加列,只需添加一个随后的'mutate(new_col = diff + days(1))'......假设您使用'lubridate'并且您正在寻求增加一天。 –

+0

你意识到'+ 1'的作品,对吧? 'date1 < - “07/31/1982”; date2 < - “08/01/1982”; as.Date(date1,format =“%m /%d /%Y”) - as.Date(date2,format =“%m /%d /%Y”)+ 1'。要添加+1,只需输入“+ 1”。 –

+0

我做了这个评论,让OP考虑他们打算增加的内容,因为它在问题中不清楚。详细是不是一个错误。 –

回答

0

你可以这样做:

library(dplyr) 
diff<- df %>% mutate(diff = difftime(as.Date(date1,format = "%m/%d/%Y"), 
            as.Date(date2,format = "%m/%d/%Y")), 
        new_col = as.integer(diff + 1)) 

注:

  1. difftime取两个日期之间的时间差,并返回difftime对象
  2. 假设您想在结果diff中添加一天,您可以添加一个并将整个事件转换为整数。
  3. 关于difftime的好处是您可以拥有不同的时间单位。所以diff实际上是“周”或“月”
  4. mutate让你使用你刚才一样mutate调用中创建的变量,因此无需第二mutatenew_col=

例子:

> difftime(as.Date("2017-05-30"),as.Date("2017-05-28")) 
Time difference of 2 days 

> difftime(as.Date("2018-05-30"),as.Date("2017-05-28"), units = "weeks") 
Time difference of 52.42857 weeks 

> difftime(as.Date("2018-05-30"),as.Date("2017-05-28"), units = "weeks") %>% as.integer 
[1] 52 
1

不知道你的初始日期的样子,但你可以lubridate包凯文得到更清晰的代码中提到:

library(tidyverse) 
library(lubridate) 

diff<- df %>% 
    mutate(diff_plus_one = as.character(ymd(date1) - ymd(date2) + 1) 

如果日期格式为"%m/%d/%Y",请使用mdy而不是ymd,或者如果它们已经是date对象,则以前不要使用任何内容。

相关问题