r - 使用日期条件仅检索 r 中的选定列数据
问题描述
我有两个表(订单,价格),我想根据日期标准从订单表到价格表中检索 Monthly_code 和 daily_code。两个表都没有唯一的主键。
**Orders table data**
orders <- data.table(ID = c(1,1,1,2,2,3), Monthly_code = c('xx','xx','vv','uu','mm','gg'),
daily_code = c('xx-1','xx-1','vv-1','uu-1','mm-1','gg-1'),
Time_in = c('12/1/2020','12/16/2020','12/28/2020', '6/1/2020', '4/5/2020', '6/9/2020'),
Time_out = c('12/6/2020', '12/27/2020', '12/31/2020','6/13/2020','4/12/2020','6/23/2020')
**Prices table data**
prices <- data.table(ID = c(1,1,1,1,2,2,2,3), record_date = c('12/2/2020','12/3/2020','12/4/2020',
'12/5/2020', '6/6/2020', '6/7/2020', '6/8/2020' , '6/20/2020'), Price = c(20,22,21,22,13,15,22,30))
**Expected results data**
price_2 <- data.table(ID = c(1,1,1,1,2,2,2,3), record_date = c('12/2/2020','12/3/2020','12/4/2020',
'12/5/2020', '6/6/2020', '6/7/2020', '6/8/2020' , '6/20/2020'),
Price = c(20,22,21,22,13,15,22,30), Monthly_code = c('xx','xx','xx','xx', 'uu','uu', 'uu','gg'),
daily_code = c('xx-1', 'xx-1', 'xx-1','xx-1', 'uu-1', 'uu-1','uu-1','gg-1'))
解决方案
您可以使用fuzzyjoin
连接范围内的两个数据框。
library(dplyr)
library(lubridate)
library(fuzzyjoin)
orders %>%
mutate(across(starts_with('Time'), mdy)) %>%
fuzzy_right_join(prices %>% mutate(record_date = mdy(record_date)),
by = c('ID', 'Time_in' = 'record_date', 'Time_out' = 'record_date'),
match_fun = c(`==`, `<=`, `>=`)) -> result
result
# ID.x Monthly_code daily_code Time_in Time_out ID.y record_date Price
#1 1 xx xx-1 2020-12-01 2020-12-06 1 2020-12-02 20
#2 1 xx xx-1 2020-12-01 2020-12-06 1 2020-12-03 22
#3 1 xx xx-1 2020-12-01 2020-12-06 1 2020-12-04 21
#4 1 xx xx-1 2020-12-01 2020-12-06 1 2020-12-05 22
#5 2 uu uu-1 2020-06-01 2020-06-13 2 2020-06-06 13
#6 2 uu uu-1 2020-06-01 2020-06-13 2 2020-06-07 15
#7 2 uu uu-1 2020-06-01 2020-06-13 2 2020-06-08 22
#8 3 gg gg-1 2020-06-09 2020-06-23 3 2020-06-20 30
推荐阅读
- flutter - 将 aws_dynamodb_api 0.2.0 与 amplify_flutter 0.2.5 一起使用时出错
- java - React.js:从JavaSpring-boot后端获取POSTMapping发送请求,但什么也不做
- python - 如何减去数据框中的两个连续行?
- reactjs - AgGridReact 样式问题 - 单元格下的标题
- java - 进程列表
flatMap 后有同步延迟? - python - Python多处理,从子进程读取输入
- mysql - 使用 python 代码重命名 phpmyadmin 数据库名称
- python - 从没有字符串格式的sqlite中检索文本以进行比较
- jquery - jquery - 在点击事件回调中获取 $(this) 选中单选选项的值
- angular - 为什么我不能从我的 Gorilla WebSocket 服务器读取消息,直到它被客户端关闭?