【发布时间】:2021-05-31 10:37:29
【问题描述】:
我希望有人可以帮助我。我有两张表需要在最近的日期加入。以下是一些示例数据:
new <- data.table( date = as.Date( c( "2016-03-02", "2016-03-04",
"2016-04-02" ) ), data.new = c( "t","u","v" ) )
old <- data.table( date = as.Date( c( "2016-03-01", "2016-03-07",
"2016-04-02", "2015-03-02" ) ),
data.old = c( "a","b","c","d" ) )
我正在寻找一些使用 data.table 包的解决方案。我找到了这个解决方案:
setkeyv(new, "date")
setkeyv(old, "date")
combined <- new[old, roll = "nearest"]
解决方案如下:
> new
date data.new
1: 2016-03-02 t
2: 2016-03-04 u
3: 2016-04-02 v
> old
date data.old
1: 2016-03-01 a
2: 2016-03-07 b
3: 2016-04-02 c
4: 2015-03-02 d
> combined
date data.new data.old
1: 2015-03-02 t d
2: 2016-03-01 t a
3: 2016-03-07 u b
4: 2016-04-02 v c
但这并不是我想要实现的,请参阅下面的所需输出: 在这种特殊情况下,日期“2015-03-02”和“2016-03-01”在“新”中没有对应的匹配项。最后只有最近的日期“2016-03-01”得到匹配值,而“2015-03-02”的匹配值保留为NA。
> combined
date data.new data.old
1: 2015-03-02 NA d
2: 2016-03-01 t a
3: 2016-03-07 u b
4: 2016-04-02 v c
感谢您的帮助!一个后续问题是,如果有多个 ID 怎么办?这意味着,如果需要对数据进行分组怎么办?谢谢!
【问题讨论】:
-
我认为你在 new 中的对应匹配是
2016-03-02。 -
是的,也许我需要更精确。我的意思是 2015-03-02 和 2016-03-01 在“新”中没有完全对应的匹配。也许这更清楚?
标签: r join data.table