Dplyr mutate向列添加+1

时间:2017-09-17 00:38:33

标签: r dplyr

我想计算2个日期之间的差异,并在结果列中添加+ 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

2 个答案:

答案 0 :(得分:1)

不确定您的初始日期是什么样的,但是您可以使用lubridate包获得更清晰的代码,如Kevin提到的那样:

library(tidyverse)
library(lubridate)

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

如果日期采用"%m/%d/%Y"格式,请使用mdy代替ymd,或者如果他们已经date个对象,则不要使用以前的任何事情。

答案 1 :(得分: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实际上可以在&#34;周&#34;或&#34;月&#34;
  4. mutate可让您使用刚刚在同一mutate电话中创建的变量,因此mutate无需第二个new_col=
  5. 示例:

    > 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