2012-01-07 3 views
3

Мой входной файл содержит транзакцию на каждой строке. В следующем примере показана структура моего входного файла:Как я могу вычислить частоты наборов элементов с помощью R?

Вышеупомянутый входной файл содержит 11 элементов и 8 наборов предметов. Этот входной файл имеет 3 уникальных элемента и 5 уникальных наборов предметов. Я хотел бы вычислить частоты каждого уникального набора предметов. Для приведенного выше входного файла, я хотел бы написать сценарий R, который генерирует выходной сигнал, похожий на следующий CSV файл:

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

В докладе показано количество вхождений каждого уникального НИКАКИХ гарантий в файле ввода операций разделенного по общему количеству наборов элементов на входе. Обратите внимание, что отчет отсортировал элементы на основе их частот. Как я могу использовать R для вычисления частот наборов предметов в файле входных транзакций?

UPDATE: Я уже вычислил ассоциативные правила с использованием read.transactions и apriori методы. Могу ли я повторно использовать результаты этих методов для вычисления частот входных наборов.

ответ

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 (header = TRUE, text = "\ 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» в dataframe, либо использовать '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

Смежные вопросы