2012-01-07 6 views
3

입력 파일에 각 행에 트랜잭션이 있습니다. 다음 예제는 입력 파일의 구조를 보여줍니다.R을 사용하여 항목 집합의 빈도를 계산하려면 어떻게해야합니까?

a 
a 
a,b 
b 
a,b 
a,c 
c 
c 

위의 입력 파일에는 11 개의 항목과 8 개의 항목 집합이 있습니다. 이 입력 파일에는 3 개의 고유 항목과 5 개의 고유 항목 집합이 있습니다. 각 고유 항목 집합의 빈도를 계산하고 싶습니다. 보고서 분할 입력 트랜잭션 파일에서 각각의 고유 한 항목 집합의 발생 횟수를 제공

"a",0.25 
"a,b",0.25 
"c",0.25 
"b",0.125 
"a,c",0.125 

: 위의 입력 파일을 위해, 나는 다음과 같은 CSV 파일과 유사한 출력을 생성하는 R 스크립트를 작성하고 싶습니다 입력의 총 항목 수로 나눕니다. 보고서는 항목 집합을 빈도별로 정렬했습니다. R을 사용하여 입력 트랜잭션 파일에서 항목 집합의 빈도를 계산하려면 어떻게해야합니까?

업데이트 : 나는 이미 read.transactionsapriori 방법을 사용하여 연결 규칙을 계산했습니다. 이 메소드의 결과를 재사용하여 입력 항목 집합의 빈도를 계산할 수 있습니까?

답변

2

과 같이 간단한 사용하는 또 다른 방법 :

Data <- read.table(header=TRUE, text=" 
itemset 
a 
a 
a,b 
b 
a,b 
a,c 
c 
c") 

cbind(table(Data), table(Data)/nrow(Data)) 

## EDIT: Include sorting by observed proportion 
T <- table(Data)      # observed freq. 
T <- cbind(T, T/nrow(Data))    # combine freq. and prop. 
T <- T[order(T[,2], decreasing=TRUE),] # sort 
colnames(T) <- c("freq", "prop")  # add column names 
+0

이 코드는 주파수별로 정렬하지 않습니다. – reprogrammer

+0

@reprogrammer 사과드립니다. 업데이트 됨. –

+0

누구나 나를 도울 수 있습니까? 첫 번째 코드 줄을 실행할 때 오류가 발생하는 이유는 무엇입니까? read.table (헤더 = TRUE, 텍스트 = "\ nitemset \ na \ na \ na, b \ nb \ na, b \ na, c \ nc \ nc")의 오류 : 사용되지 않은 인수 (텍스트 = "\ nitemset \ na \ na \ na, b \ nb \ na, b \ na, c \ nc \ nc") – moldovean

1

입력 데이터가 'dat.txt'라는 파일에 있으면이 코드가 작동합니다. 출력은 'out.csv'라는 동일한 디렉토리의 파일에 있습니다.

Y=read.table('dat.txt') 
Y=as.character(unlist(Y)) 
U=unique(Y) 
n=length(U) 
F=rep(0,n) 
for(i in 1:n) F[i] = mean(Y==U[i]) 
D=cbind(U,F) 
colnames(D)=c("Value","Frequency") 
write.csv(D,'out.csv') 

이 코드는 귀엽다.

+0

이 코드 조각 주파수에 의해 정렬되지 않습니다. – reprogrammer

7
dat <- read.table(text="a 
a 
a,b 
b 
a,b 
a,c 
c 
c") 
prop.table(table(dat$V1)) 

# a a,b a,c  b  c 
#0.250 0.250 0.125 0.125 0.250 
dat.prop <- as.data.frame(prop.table(table(dat$V1))) 
dat.prop <- dat.prop[order(dat.prop$Freq, decreasing=TRUE), ] 
dat.prop 
#-------- Added the order step as a revision 
    Var1 Freq 
1 a 0.250 
2 a,b 0.250 
5 c 0.250 
3 a,c 0.125 
4 b 0.125 
#--------- 

write.table(dat.prop, file="dat.prop.csv", sep=",", header=FALSE) 
+0

나는이 방법이 가장 단순하고 가장 직설적이라고 생각한다. –

+0

prop.table()이 필요 없습니다. table() 잘 작동합니다. 아래 내 대답을 참조하십시오. –

+0

글쎄, 당신은 데이터 프레임의'NROW'로 나누거나'prop.table'을 사용해야합니다. 나는 더 높은 차원으로 일반화하기 때문에'prop.table'을 제공하기로했습니다. –

1

이 같은 plyr

library(plyr) 
ddply(dat, "V1", summarize, Freq = length(V1)/NROW(dat)) 

    V1 Freq 
1 a 0.250 
2 a,b 0.250 
3 a,c 0.125 
4 b 0.125 
5 c 0.250 
+0

이 코드는 주파수별로 정렬하지 않습니다. – reprogrammer

+0

주파수를 기준으로 분류하여 쉽게 수정할 수 있습니다. – Ramnath

+0

주파수를 내림차순으로 정렬하려면 코드를 업데이트 하시겠습니까? – reprogrammer

관련 문제