我正在R中进行一些关联规则挖掘,并希望提取我的结果,以便我可以构建报告 我的结果如下:
> inspect(rules[1:3])
lhs rhs support confidence lift
1 {apples} => {oranges} 0.00029 0.24 4.4
2 {apples} => {pears} 0.00022 0.18 45.6
3 {apples} => {pineapples} 0.00014 0.12 1.8
我如何提取" rhs"这里是橙子,梨和菠萝的载体
此外,我如何从摘要中提取信息,即
> summary(rules)
数据类型是" s4"当输出在列表等中时提取没有问题。你如何做equivelant? 一套3条规则
rule length distribution (lhs + rhs):sizes
2
3
Min. 1st Qu. Median Mean 3rd Qu. Max.
2 2 2 2 2 2
我想提取" 3"来自"一套3条规则"
我已经使用" @" What does the @ symbol mean in R?
但是一旦我使用它,我如何将我的结果变成一个矢量,即
inspect(rules@rhs)
1 {oranges}
2 {pears}
3 {pineapples}
成为长度为3的字符向量
答案 0 :(得分:3)
回答第二个问题:length(rules)
现在谈谈你的第一个问题:
library("arules")
data("Adult")
## Mine association rules.
rules <- apriori(Adult,parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
summary(rules)
l = length(rules)
everything = labels(rules)
#print(everything)
cut = unlist(strsplit(everything,"=> "))[seq(2,2*l,by=2)]
print(cut)
如果你有疑问,请不要犹豫,这可能有点密集: - )
答案 1 :(得分:2)
inspect
不会返回任何内容,只是打印输出。发生这种情况时,如果要将输出保存为字符串,则可以使用函数capture.output
。例如,获取rhs
data(Adult)
rules <- apriori(Adult, parameter = list(support = 0.4))
inspect(rules[1:3])
# lhs rhs support confidence lift
# 1 {} => {race=White} 0.8550428 0.8550428 1
# 2 {} => {native-country=United-States} 0.8974243 0.8974243 1
# 3 {} => {capital-gain=None} 0.9173867 0.9173867 1
## Capture it, and extract rhs
out <- capture.output(inspect(rules[1:3]))
gsub("[^{]+\\{([^}]*)\\}[^{]+\\{([^}]*)\\}.*", "\\2", out)[-1]
# [1] "race=White" "native-country=United-States"
# [3] "capital-gain=None"
但是,您似乎只能使用rules
rhs
访问此信息
str(rhs(rules)@itemInfo)
# 'data.frame': 115 obs. of 3 variables:
# $ labels :Class 'AsIs' chr [1:115] "age=Young" "age=Middle-aged" "age=Senior" "age=Old" ...
# $ variables: Factor w/ 13 levels "age","capital-gain",..: 1 1 1 1 13 13 13 13 13 13 ...
# $ levels : Factor w/ 112 levels "10th","11th",..: 111 63 92 69 30 54 65 82 90 91 ...
通常,使用str
查看构成的对象,以便您可以决定如何提取组件。
答案 2 :(得分:0)
您可以将RHS提取为项目名称的字符向量(不包括“=&gt;”或大括号等无关文本),如下所示:
rules@rhs@itemInfo$labels[rules@rhs@data@i+1]
存储在rules@rhs@data@i
中的索引值的范围是0到1,小于唯一标签的数量。因此,索引标签需要添加“1”以避免尝试访问rules@rhs@itemInfo$labels
的第0个元素。
答案 3 :(得分:0)
也许在问这个问题时这不是一个选择,但是有一个DATAFRAME()
函数可以将rules
对象转换为data.frame
,从中可以提取您想要的东西会更容易。您甚至可以排除花括号,并在项目集中的项目之间设置所需的分隔符。
从已接受的答案中借用示例,
data(Adult)
rules <- apriori(Adult, parameter = list(support = 0.4))
我们现在可以将其变成data.frame
并做一些有用的事情:
rule_data <- DATAFRAME(rules,
separate = TRUE,
setStart = '',
itemSep = ',',
setEnd = '')
> str(rule_data)
'data.frame': 169 obs. of 6 variables:
$ LHS : Factor w/ 76 levels "","relationship=Husband",..: 1 1 1 1 2 3 2 3 3 3 ...
$ RHS : Factor w/ 7 levels "race=White","native-country=United-States",..: 1 2 3 4 5 6 7 7 1 2 ...
$ support : num 0.855 0.897 0.917 0.953 0.403 ...
$ confidence: num 0.855 0.897 0.917 0.953 0.999 ...
$ lift : num 1 1 1 1 2.18 ...
$ count : int 41762 43832 44807 46560 19704 19704 19715 19899 20054 20003 ...
> rule_data$RHS[1:5]
[1] race=White
[2] native-country=United-States
[3] capital-gain=None
[4] capital-loss=None
[5] marital-status=Married-civ-spouse