2017-09-17 84 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對象,則以前不要使用任何內容。