2016-09-29 4 views
0

Wie kann ich extarct Regeln, die in lhs nur eine speziellen ItemExtrahieren von Sonderregeln in Assoziationsanalyse

1 {231050}      => {231051} 0.06063479 1.0000000 16.492183 
2 {231050,231051}    => {275001} 0.05490568 0.9055145 6.576661 
3 {231050,275001}    => {231051} 0.05490568 1.0000000 16.492183 

erscheint ich möchte nur die erste Zeile extrahieren, in dem ich habe nur ein 231050

Antwort

2

arules hat eine Funktion subset (Siehe ?arules::subset), die Sie verwenden können, um eine Teilmenge von Regeln ziehen Sie Ihre Kriterien erfüllen - wie bestimmte Elemente auf lhs, minimale Unterstützung etc:

library(arules) 
data("Adult") 
rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, minlen = 2)) 
item <- "race=White" 
rules.sub <- subset(rules, lhs %in% item & size(lhs)==1) 
inspect(rules.sub) 
# lhs    rhs       support confidence lift  
# 7 {race=White} => {native-country=United-States} 0.7881127 0.9217231 1.0270761 
# 8 {race=White} => {capital-gain=None}   0.7817862 0.9143240 0.9966616 
# 9 {race=White} => {capital-loss=None}   0.8136849 0.9516307 0.9982720 
+2

Große Lösung. Ich würde Ihre Teilmenge als schreiben Rules <- Teilmenge (Regeln, LHs% in% Element & Größe (LH) == 1) , die explizit angibt, was Sie in den Lhs wollen und nur die Lhs der Regel können schließe einen Gegenstand ein (dh die Größe von lhs ist 1). Sie können es auch als reguläre Teilmenge mit '[' wie folgt umschreiben: Rules_Regeln [LHs (Regeln)% in% Element & Größe (LHS (Regeln)) == 1] –

+0

Das ist es! Ich suchte nach Größe und fand es nicht im Doc. Also machen wir es Teilmenge (Regeln, lhs% in% item & size (lhs) == 1) '. Vielen Dank... – lukeA

0

Try this (vorausgesetzt, die Regeln erzeugt werden unter Verwendung von a priori):

df <- as(rules, 'data.frame') 
df$rules <- as.character(df$rules) 
lhs <- do.call(rbind, strsplit(df$rules, split='=>'))[,1] 
lhs.items <- strsplit(lhs, split=',') 
indices <- which(lapply(lhs.items, length) == 1) 
special.item <- '231050' 
special.indices <- which(grepl(special.item, lhs.items[[indices]])) 
selected.rules <- df[special.indices,] 
selected.rules 

    rules  support confidence   lift 
1 {231050}=>{231051} 0.06063479   1 16.49218 
+0

in der zweiten Zeile ich den Fehler: Fehler bei strsplit (df $ rules, split = "=>"): Nicht-Zeichen-Argument – Kaja

+1

konvertiert die Regelspalte in ein Zeichen, aktualisiert den Code. –

+0

Fehler in lhs.items [[Indizes]]: rekursive Indizierung auf Level 2 fehlgeschlagen – Kaja