如何在R中构建多条准则索引,包含>和<运算符?

drf*_*afu 6 r data.table

我正在尝试查找和合并我在多个标准上的两个数据框,并且在理解它时遇到很多麻烦.

我有两组数据,一个我想索引,包含一些产品的有效日期,另一组给我产品使用,如下:

    Indexset <- data.table(validfrom=as.Date(c("2015-08-01", "2015-08-02", "2015-08-03", "2015-08-04")),
                         validto=as.Date(c("2015-08-07", "2015-08-08","2015-08-09", "2015-08-10")),
                         username=c("Smith", "Cole", "Amos", "Richardson"),
                         productcode=c(1,2,3,4))

    Useset <- data.table(usedate=as.Date(c("2015-08-04", "2015-08-06", "2015-08-06", "2015-08-09")),
                     username=c("Smith", "Richardson", "Cole", "Amos")) 
Run Code Online (Sandbox Code Playgroud)

我要做的是在'Useset'中添加一个列,其中包含'Indexset'中的'productcode',方法是检查'usedate'是否在'validto'和'validfrom'日期之间,然后匹配名称.

我已经尝试了各种各样的方法围绕'merge'函数,但无法弄清楚如何让大于和小于运算符的语法.

还试过设置和滚动连接但努力使它们工作.

目前从excel迁移,这只是一个数组中的多标准索引匹配,但不知道如何将它放在R中.

要清楚,我没有遇到错误,只是将语法放在一起完全丢失了.

一旦我有'产品代码',我想我可以处理合并,但绝对难倒在这里!

非常感谢任何人都可以提供帮助!

Psi*_*dom 5

您可以尝试使用non-equi当前开发版本data.tablev1.9.7中的连接功能.请阅读此处的安装说明.

Useset[Indexset, on = .(username, usedate >= validfrom, usedate <= validto), # which rows?
         productcode := productcode][]                                       # what to do?

#       usedate   username productcode
# 1: 2015-08-01      Smith           1
# 2: 2015-08-04 Richardson           4
# 3: 2015-08-02       Cole           2
# 4: 2015-08-03       Amos           3
Run Code Online (Sandbox Code Playgroud)

Usenet就地更新.


如果性能不是一个大问题,加入username然后过滤器也应该工作,这不需要开发版本data.table:

Useset[Indexset, on = "username"][usedate >= validfrom & usedate <= validto, .(usedate, username, productcode)]
#      usedate   username productcode
# 1: 2015-08-01      Smith           1
# 2: 2015-08-02       Cole           2
# 3: 2015-08-03       Amos           3
# 4: 2015-08-04 Richardson           4
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢这位男士,这是一个令人头痛的问题.第二种解决方案可以满足我的需要,但我也会玩第一种解决方案.@Arun - 享受您的DataCamp课程! (3认同)