我有一个如下的数据框。
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代码,我发现很难解决这个问题。
答案 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)