r - 在外部查找表的日期之间进行变异

标签 r dplyr

我想改变 tibble其中通过查找外部“日期查找表”包含日期列表:

date_lookup<-tibble(start = lubridate::dmy("01012020", "01022020"),
           end = lubridate::dmy("31012020", "28022020"),
           id = c(1, 2))

df<-tibble(record = c("A", "B"),
           date = lubridate::dmy("15022020", "03012020"))

如果日期在 df介于 date_lookup 中的开始日期或结束日期之间我想拉过适当的id来自date_lookup .

我尝试过以下方法:

df %>% rowwise() %>% 
  mutate(id = ifelse(between(date, date_lookup$start, date_lookup$end), date_lookup$id, NA))

但是正如您所看到的,df 中的第一行显示为NA (它应该显示数字 2)。

预期输出:

# A tibble: 2 x 3
# Rowwise: 
  record date          id
  <chr>  <date>     <dbl>
1 A      2020-02-15     2
2 B      2020-01-03     1

一个dplyr解决方案会更好。

最佳答案

您可以在此处使用fuzzyjoin:

fuzzyjoin::fuzzy_inner_join(df, date_lookup, 
           by = c('date' = 'start', 'date' = 'end'), match_fun = list(`>=`, `<=`))

# A tibble: 2 x 5
#  record date       start      end           id
#  <chr>  <date>     <date>     <date>     <dbl>
#1 A      2020-02-15 2020-02-01 2020-02-28     2
#2 B      2020-01-03 2020-01-01 2020-01-31     1

使用tidyverse函数:

tidyr::crossing(df, date_lookup) %>% dplyr::filter(date >= start, date <= end)

关于r - 在外部查找表的日期之间进行变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62912260/

相关文章:

r - 数据框中逐行的阈值

r - R 中多重插补数据集的多级回归模型(Amelia、zelig、lme4)

r - 将数值向量拆分为不相等的部分,然后将自定义函数应用于每个部分

r - mutate 找不到函数

r - 如何在 R 中按多个日期过滤多个因子级别?

r - 使用 2 个表创建新功能

r - 根据另一个变量改变 R 中轴标签的颜色

R中固定间隔的滚动平均值

r - 与dplyr小组第一名的差异

r - 为具有特定条件的标志创建 id 序列