Как я могу вычислить частоты наборов элементов, используя R? - PullRequest
3 голосов
/ 07 января 2012

Мой входной файл содержит транзакцию в каждой строке.В следующем примере показана структура моего входного файла:

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

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

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

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

ОБНОВЛЕНИЕ: Я уже вычислил правила ассоциации, используя read.transactions и apriori методы.Можно ли повторно использовать результаты этих методов для вычисления частот входных наборов элементов.

Ответы [ 4 ]

7 голосов
/ 07 января 2012
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)
2 голосов
/ 07 января 2012

Так просто, как это:

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
1 голос
/ 07 января 2012

Другое решение с использованием 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
1 голос
/ 07 января 2012

Если входные данные находятся в файле с именем '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')

Приношу свои извинения за то, что этот код не красив и не прокомментирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...