连接2个数据表没有任何键,但有一些逻辑链接

时间:2016-07-26 15:30:57

标签: r data.table

我有2个数据表:itemscategory

require(data.table)
set.seed(1L) # for reproducibility
category <- data.table(from = c(0,8,15,25,45.5,90,101), 
                       to = c(5,12,20,39,60,100,99999), 
                       class = c("A","B","C","D","E","F","G"))

items <- data.table(weight = sample(0:999,10000,replace=TRUE))  

我想要&#34;项目中的每一行&#34;一个类别标签,例如,如果第一项的权重为7,它就会选择等级&#34; B&#34;。类别权重不必跨越所有权重,可能存在间隙,因此类别A为0-5,B为8-12,C为15-20等

我可以在%in%的数据框中执行此操作,但是&#34;项目&#34;数据集有1000万个项目和&#34;类别&#34;数据集有200多个类别,因此我试图在数据表中执行此操作。

我该怎么做?

2 个答案:

答案 0 :(得分:8)

使用当前开发版data.table,non-equi

中的v1.9.7联接(新功能)
category[, to2 := shift(from, type="lead", fill=to[.N]+1L)]
items[category, result := class, on=.(weight >= from, weight < to2)]

就是这样。对于每个categoryitems中的相应匹配行是根据提供给on=参数的条件找到的。然后,这些匹配的行将获得相应的class

请参阅安装说明here

答案 1 :(得分:1)

试试这个

items$label=cut(items$weight,breaks = c(-1,category$to),right = T,labels = category$class)