2016-06-05 4 views
0
나는 다음과 같은 코드 및 수신 해당 협회 규칙을 사용

:매칭 협회 규칙은

library("arules") 
data("Adult") 
    rules <- apriori(Adult,parameter = list(supp = 0.5, conf = 0.9, target = "rules")) 
    labels(rules) 

50 규칙이 있습니다.

Adult3<-as.data.frame(as(Adult,"matrix")) 

을 그리고 Adult3$RUL_NUM에 새 열을 추가 : 나는 소스 데이터에 다시 가고 싶습니다. 이 열은 해당 레코드가 준수하는 관련 규칙 (이 경우 1에서 50까지)의 값을 (각 레코드에 대해) 포함합니다. 레코드 당 둘 이상의 규칙이있는 경우 레코드가 준수하는 마지막 규칙을 추가하고 싶습니다.

답변

1

아마도 is.superset 함수를 살펴보고 싶을 것입니다. 예를 들어

is.superset(Adult, lhs(rules)) 

당신 "중요한"룰이다 각 트랜잭션 나타내는 논리 매트릭스를 줄 것이다 (즉, LHS 모든 항목이 존재하는 경우).

편집 : 당신이 아비가 아래에 제시 한 코드를 사용 후 모든 규칙과 일치 할 경우 : (당신이 사용할 수있는 일치하는 마지막 규칙의 ID (번호)를 얻으려면

is.superset(Adult, lhs(rules)) 

을 더 많거나 상위 집합 매트릭스에 이하) 직선 앞으로 R 코드 :

w <- sapply(apply(is.superset(Adult, rules), MARGIN = 1, which), tail, n = 1) 

이 코드는 각 행의 모든 ​​사람들의 열 인덱스를 발견하고 마지막 하나를 반환합니다.

+0

감사합니다. Michael. 각 데이터 행 (이 경우 성인)에 숫자 (이 경우 규칙 수를 1에서 50까지)를 추가하고 싶습니다. 번호는 특정 라인에 대한 관련 규칙입니다. 솔루션이 각 라인에 특정 규칙 번호를 제공 할 수 있습니까? – Avi

+0

Michael, 솔루션을 변경해야한다고 생각합니다. 동일한 LHS의 경우 다른 RHS가있을 수 있기 때문입니다. 그리고 각 줄에 대해 일치하는 규칙을 일치시키고 싶습니다 (각 규칙에 대해 sql에서 select를 실행하고 각 규칙이 하위 집합 인 경우 각 줄을 보는 것처럼). 일부 규칙은 동일한 LHS를 갖지만 다른 RHS를 가지므로이를 고려해야합니다. 그래서 당신의 솔루션이되어야한다고 생각합니다. superset (성인, (규칙)) – Avi

+0

Michael 대단히 감사합니다! 그것은 작동합니다! 나는 2 개의 발언이있다. 내 소스 파일에는 1712 행 (표제가있는 1713)이 들어 있으며 트랜잭션으로 변환 된 데이터 프레임입니다. w <- sapply (적용 (is.superset (mytrans, 규칙), MARGIN = 1), 꼬리, n = 1) 그런 다음 w를 w를 데이터 프레임으로 변환했습니다. df <- data.frame (matrix (unlist (w), byrow = T), stringsAsFactors = FALSE) 그러나 지금은 1256 개의 행만 있습니다. 나는 gap (456)이 적절한 규칙이없는 소스 라인 (integer (0)) 때문에 발생한다고 생각한다. 규칙 번호가 누락 된 경우 원래의 행 번호를 공백 값으로 유지하는 방법이 있습니까? – Avi