我想加入两个data.table日期作为加入.
好吧,有时我没有完全匹配,在这种情况下,我想找到最近的更少日期.我的问题与关于SQL的这篇文章非常相似: SQL加入最近的日期
我知道data.table语法类似于SQL,但我无法对此进行编码.什么是正确的语法?
一个简化的例子:
Dt1
date x
1/26/2010 - 10
1/25/2010 - 9
1/24/2010 - 9
1/22/2010 - 7
1/19/2010 - 11
Dt2
date
1/26/2010
1/23/2010
1/20/2010
Run Code Online (Sandbox Code Playgroud)
产量
date x
1/26/2010 - 10
1/23/2010 - 7
1/20/2010 - 11
Run Code Online (Sandbox Code Playgroud)
先感谢您.
干得好:
library(data.table)
Run Code Online (Sandbox Code Playgroud)
创建数据:
Dt1 <- read.table(text="
date x
1/26/2010, 10
1/25/2010, 9
1/24/2010, 9
1/22/2010, 7
1/19/2010, 11", header=TRUE, stringsAsFactors=FALSE)
Dt2 <- read.table(text="
date
1/26/2010
1/23/2010
1/20/2010", header=TRUE, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
转换为data.table,将字符串转换为日期,并设置data.table键:
Dt1 <- data.table(Dt1)
Dt2 <- data.table(Dt2)
Dt1[, date:=as.Date(date, format=("%m/%d/%Y"))]
Dt2[, date:=as.Date(date, format=("%m/%d/%Y"))]
setkey(Dt1, date)
setkey(Dt2, date)
Run Code Online (Sandbox Code Playgroud)
加入表格,使用roll=TRUE:
Dt1[Dt2, roll=TRUE]
date x
[1,] 2010-01-20 11
[2,] 2010-01-23 7
[3,] 2010-01-26 10
Run Code Online (Sandbox Code Playgroud)