gpt4 book ai didi

r - 基表 :split() implementation - faster options within R/data.

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:14 27 4
gpt4 key购买 nike

我想使用 arules:apriori 函数在 R 中执行关联规则挖掘,这需要一个 transactions 类型的输入。这只不过是一个因素列表,每个元素代表在该交易中购买的一组独特的产品。下面是一个例子:

  products   transaction
1 {a,b} 1
2 {a,b,c} 2
3 {b} 3

在包文档中,他们推荐使用 split 来生成这样的代码:

split(DT[,"products",with=FALSE], DT[,"transaction",with=FALSE])

但是当我在大量交易上尝试同样的操作时,速度慢得令人痛苦。下面的示例 MWE:

library(data.table)

#Number of transactions
ntrxn = 1000000

#Generating a dummy transactions table
#Recycling transaction vector over products
DT = data.table(transaction = seq(1,ntrxn,1)
,products = rep(letters[1:3],ntrxn))[order(transaction)]

TEST = split(DT[,"products",with=FALSE], DT[,"transaction",with=FALSE])

有没有办法通过利用 data.table by 条件来加快速度?我试过这个:

DT[,list(as.factor(.SD$products)),by=transaction] 

但它只是返回给我 data.table(事后看来这是有道理的)。有没有一种使用类似表达式但利用高性能 data.table 内部结构来处理繁重工作的向量列表的方法。

如果 data.table 本身不是这里的答案,我真的很好奇哪种方法可以让我得到我正在寻找的输出。

最佳答案

包装 OP 的最后一行代码以创建列表列:

DT[, .(.(products)), by=transaction]

.()list() 的别名。无论如何,这在我的电脑上更快。

关于r - 基表 :split() implementation - faster options within R/data.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com