拆下支架和支架;apriori算法输出的符号&;与R中的另一个数据帧连接

拆下支架和支架;apriori算法输出的符号&;与R中的另一个数据帧连接,r,R,我对R比较陌生&被困在这里。搜索了论坛和文档,但没有找到答案 我有一个场景,apriori算法的规则输出必须与lhs和rhs值上的另一个数据帧连接。我能够创建规则输出的dataframe,但如果lhs中有多个项目集,我无法删除大括号&=>符号和除法。完成后,我必须在lhs&rhs值上加入一个dataframe,以从其他dataframe中检索更多的列 下面是我根据apriori的规则输出创建的数据帧 > RulesDf

我对R比较陌生&被困在这里。搜索了论坛和文档,但没有找到答案

我有一个场景,apriori算法的规则输出必须与lhs和rhs值上的另一个数据帧连接。我能够创建规则输出的dataframe,但如果lhs中有多个项目集,我无法删除大括号&=>符号和除法。完成后,我必须在lhs&rhs值上加入一个dataframe,以从其他dataframe中检索更多的列

下面是我根据apriori的规则输出创建的数据帧

> RulesDf
                                             rules support confidence     lift
1               {0400000000002} => {0400000000001}     0.2          1 2.500000
2               {0400000000005} => {0400000000004}     0.2          1 1.666667
3               {0400000000007} => {0400000000008}     0.2          1 3.333333
4               {0400000000003} => {0400000000004}     0.3          1 1.666667
5 {0400000000001,0400000000003} => {0400000000004}     0.2          1 1.666667
需要在lhs和rhs上连接的其他数据帧

> store1inv
   store           UPC Inventory
1      1 0400000000001       100
2      1 0400000000002        10
3      1 0400000000003      1002
4      1 0400000000004        50
5      1 0400000000005        15
6      1 0400000000006        25
7      1 0400000000007       150
8      1 0400000000008       350
9      1 0400000000009       100
10     1 0400000000010        75

基本上,我想找出以04开头的rulesDf中所有项目的库存。非常感谢您的帮助。

这里有一种可能性,这是您的规则SDF的副本/可复制格式

RulesDf <- structure(list(rules = c("{0400000000002} => {0400000000001}", 
"{0400000000005} => {0400000000004}", "{0400000000007} => {0400000000008}", 
"{0400000000003} => {0400000000004}", 
"{0400000000001,0400000000003} => {0400000000004}"
), support = c(0.2, 0.2, 0.2, 0.3, 0.2), confidence = c(1L, 1L, 
1L, 1L, 1L), lift = c(2.5, 1.666667, 3.333333, 1.666667, 1.666667)), 
.Names = c("rules", "support", "confidence", "lift"), 
 class = "data.frame", row.names = c(NA, -5L))

然后,您可以使用左列和右列连接到其他表。

RulesDf
的第一列中保存了什么?例如,
040000000001
040000000003
040000000004
都应该保留吗?如果是这样,它们将如何与第二个数据帧连接,因为在同一单元格中有多个匹配项。如果有多个项目,你会说“分割”。这是什么意思?我认为您最好的选择是显示“分割”的含义,然后显示您希望合并的输出是什么样子。
rules <- regcapturedmatches(RulesDf$rules, 
    gregexpr("{([^}]*)}", RulesDf$rules, perl=T))
mrules <- lapply(rules, function(x) 
    cbind(left=strsplit(x[1],",")[[1]], right=x[2]))
rules<-regmatches(RulesDf$rules, gregexpr("{([^}]*)}", 
    RulesDf$rules, perl=T))
rules<-lapply(rules, function(x) gsub("[{}]","",x))
mrules <- lapply(rules, function(x) 
    cbind(left=strsplit(x[1],",")[[1]], right=x[2]))
ExpRules <- cbind(RulesDf[rep(1:nrow(RulesDf), sapply(mrules, nrow)),], 
    do.call(rbind, mrules))
    support confidence     lift          left         right
1       0.2          1 2.500000 0400000000002 0400000000001
2       0.2          1 1.666667 0400000000005 0400000000004
3       0.2          1 3.333333 0400000000007 0400000000008
4       0.3          1 1.666667 0400000000003 0400000000004
5       0.2          1 1.666667 0400000000001 0400000000004
5.1     0.2          1 1.666667 0400000000003 0400000000004