我有这些日期时间:
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"))
我想计算一个日期是否与上一行中的日期相同。如果当前日期与前一个相同,那么我将向same_date
变量中的两行添加TRUE。如果两次不匹配,我不担心。希望这段代码能解释我之后的所作所为。
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
答案 0 :(得分:1)
如果当前日期与之前的日期相同,则OP已请求将TRUE
添加到两行。这就是diff()
方法在这里不起作用的原因。
相反,我们可以按日期分组并检查该组是仅包含一行还是多行。
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