识别列表中项目的频率

时间:2016-07-19 10:17:57

标签: r reshape

我有一个如下的数据框。

11,15,12,25
11,12
15,25
134,45,56
46
45,56
15,12
66,45,56,24,14,11,25,12,134

我想确定数据中出现的对/三元组或更高频率。比如说,在上面的数据中,对的出现如下所示

item     No of occurrence
11,12      3
11,25      2
15,12      2
15,25      2
.
.
45,56      3
134,45,56  2    ....and so on

我正在尝试为上面写一个R代码,我发现很难解决这个问题。

1 个答案:

答案 0 :(得分:1)

给定1列data.frame并用逗号分隔变量,以下内容应该产生您想要的结果:

# split column into a list
myList <- strsplit(df$V1, split=",")
# get all pairwise combinations
myCombos <- t(combn(unique(unlist(myList)), 2))

# count the instances where the pair is present
myCounts <- sapply(1:nrow(myCombos), FUN=function(i) {
                   sum(sapply(myList, function(j) {
                              sum(!is.na(match(c(myCombos[i,]), j)))})==2)})

# construct final matrix
allDone <- cbind(matrix(as.integer(myCombos), nrow(myCombos)), myCounts)

这将返回一个矩阵,其中前两列是比较项,以及这些项位于data.frame行中的计数的第三列。

数据

df <- read.table(text="11,15,12,25
11,12
15,25
134,45,56
46
45,56
15,12
66,45,56,24,14,11,25,12,134", as.is=TRUE)