【问题标题】:How to speed up this ddply?如何加快这个ddply?
【发布时间】:2013-09-10 16:40:51
【问题描述】:

我有关于一对产品的相似性的数据框,例如:

   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=b.similarity 上加入 productpairs b 按 a.product1,a.simlarity 分组”

但这更糟......有什么建议吗?

【问题讨论】:

  • 尝试为您的 SQL 查询添加适当的索引。在sqldf.googlecode.com 中搜索create index

标签: r sqldf


【解决方案1】:

使用data.table:

library(data.table)

dt = data.table(your_df)

# fast sort by similarity
setkey(dt, similarity)

# pick (at most) top 10 most similar ones
dt[, Product2[max(1, .N-9):.N], by = Product1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2019-02-06
    • 2017-12-23
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多