识别最近的日期时间

时间:2019-06-05 15:03:26

标签: r lubridate

我在逻辑上遇到了一些麻烦,需要产生df$val_most_recent。如果同时存在a_valb_val的值,则val_most_recent应该是最近时间的值(a_val对应于a_dtm,{{1} }对应于b_val)。如果时间相同,我希望b_dtma_val。如果仅报告了两个的一个值(另一个是val_most_recent,则该值应该就是那个。

NA

2 个答案:

答案 0 :(得分:1)

这里是base R中的一个选项,将日期转换为数字,将NAs替换为0,使用每行中的最大值获取列索引,使用行中的cbind索引并从“ a_val / b_val”列中提取相应的值

m1 <- sapply(df[2:3], as.numeric)
df$val_most_recent <- df[4:5][cbind(seq_len(nrow(m1)), 
         max.col(replace(m1, is.na(m1), 0), "first"))]
df$val_most_recent
#[1] 5 6 3 2

答案 1 :(得分:1)

以下是将您的文本编码成case_when语句的逻辑:

df %>%
  mutate(
    val_most_recent = case_when(
      is.na(a_val) | is.na(b_va) ~ coalesce(a_val, b_val),
      a_dtm >= b_dtm ~ a_val,
      TRUE ~ b_val
    )
  )
#   location               a_dtm               b_dtm a_val b_val val_most_recent
# 1        a                <NA> 2019-06-05 10:30:00    NA     5               5
# 2        b 2019-06-05 10:30:00                <NA>     6    NA               6
# 3        c 2019-06-05 10:45:00 2019-06-05 10:48:00     4     3               3
# 4        d 2019-06-05 10:50:00 2019-06-05 10:50:00     2     2               2