2017-10-12 1 views
0

Je ces temps de date:Trouver si la date actuelle est la même que la date précédente

library(lubridate) 
my_date_times <- dmy_hm(c("17/05/16 23:49", "17/05/16 09:39", "08/08/16 23:21", "08/12/16 09:23", "26/02/17 08:03", "12/10/17 12:04", "12/10/17 10:03")) 

Je veux calculer si une date est la même que la date de la ligne précédente. Si la date actuelle est la même que la précédente, j'ajouterais TRUE aux deux lignes de la variable same_date. Je ne suis pas concerné si les deux temps ne correspondent pas. J'espère que ce code explique ce que je cherche.

same_date <- c(TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE) 
library(tibble) 
df <- data_frame(my_date_times, same_date) 
df 

# A tibble: 7 x 2 
     my_date_times same_date 
       <dttm>  <lgl> 
1 2016-05-17 23:49:00  TRUE 
2 2016-05-17 09:39:00  TRUE 
3 2016-08-08 23:21:00  FALSE 
4 2016-12-08 09:23:00  FALSE 
5 2017-02-26 08:03:00  FALSE 
6 2017-10-12 12:04:00  TRUE 
7 2017-10-12 10:03:00  TRUE 
+3

'df $ same_date <- c (T, diff (as.Date (df $ my_date_times)) == 0)'? – lukeA

+0

Et qu'avez-vous essayé jusqu'ici? – useR

Répondre

1

L'OP a demandé d'ajouter à TRUEles deux lignes si la date actuelle est identique à la précédente. C'est pourquoi l'approche diff() ne fonctionnera pas ici. Au lieu de cela, nous pouvons regrouper par date et vérifier si le groupe se compose seulement d'une ligne ou de plusieurs rangées.

library(data.table) 
setDT(df)[, same_date := .N > 1, by = as.Date(my_date_times)][] 
  my_date_times same_date 
1: 2016-05-17 23:49:00  TRUE 
2: 2016-05-17 09:39:00  TRUE 
3: 2016-08-08 23:21:00  FALSE 
4: 2016-12-08 09:23:00  FALSE 
5: 2017-02-26 08:03:00  FALSE 
6: 2017-10-12 12:04:00  TRUE 
7: 2017-10-12 10:03:00  TRUE