我有关于一对产品相似性的数据框,例如:
Product1 Product2 similarity
p1 p2 0.102
p1 p3 0.221
p1 p4 0.333
.....
p2 p1 0.102
p2 p3 0.201
p2 p4 0.242
我想为每个产品选择前 10 个最相似的产品,例如
product.pairs<-ddply(product.pairs, "product1", transform, rank = seq_along(product1))
product.pairs<-subset(product.pairs, rank<11,select=c(product1,product2))
这在数据集很小的时候有效,但是一旦产品数量达到 30k,它就太慢了......
我还尝试了 sqldf,以模仿等级和分区,例如...
sql_top10<-" select a.product1,a.product2, a.similarity,count(*) as rank from productpairs a join productpairs b on a.product1=b.product1 and a.similarity>=b.similarity group by a。 product1,a.simlarity"
但这更糟......有什么建议吗?