sql – 独特的组合频率

前端之家收集整理的这篇文章主要介绍了sql – 独特的组合频率前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个10列的数据集.第一列是唯一标识符.其他9列是相关属性.现在,让我们说它们是整数.如果需要,可以轻松地将数据转换为键值.

例如:

id|attr1|attr2|attr3|...
a |  2  |  5  |  7  |...
b |  3  |  1  |null |...
c |  2  |null |null |...
d |  1  |  2  |  5  |...
e |  2  |  1  |  3  |...

我基本上寻找任何长度的最频繁的组合与至少一对.所以我的输出将是:

unq   | frequency
1,2   | 2
1,3   | 2
1,5   | 1
2,3   | 1
2,5   | 2
2,7   | 1
1,2,3 | 1
1,5 | 1
2,5,7 | 1

(手动完成 – 所以希望没有错误) – 配对顺序无关紧要. 2,7 = 5,7 = 7,2等

有什么想法吗?我对不同的工具持开放态度.我可以访问R,excel,sql server,MysqL等.

Excel是首选,但不是必需的!

解决方法

这是R中的解决方案:

重新创建数据

x <- data.frame(
    id = letters[1:5],attr1 = c(2,3,1,2),attr2 = c(5,NA,1),attr3 = c(7,3))
x

  id attr1 attr2 attr3
1  a     2     5     7
2  b     3     1    NA
3  c     2    NA    NA
4  d     1     2     5
5  e     2     1     3

创建一个列出所有组合的函数

make_combinations <- function(data,size){
  t1 <- apply(data[,-1],function(data)unname(sort(data)))
  t2 <- lapply(t1,function(xt){if(length(xt)>=size){combn(xt,size)}})
  t3 <- sapply(t2[!is.na(t2)],function(chunk){if(!is.null(chunk))apply(chunk,function(x)paste(x,collapse=","))})
  t4 <- unlist(t3)
  t4
}

创建第二个函数来计算组合

count_combinations <- function(data,nn=2:3){
  tmp <- unlist(lapply(nn,function(n)make_combinations(data,n)))
  sort(table(tmp),decreasing=TRUE)
}

结果:

count_combinations(x,2:3)


  1,2   1,3   2,5 1,3 1,5   1,5   2,3 2,7   2,7   5,7 
    2     2     2     1     1     1     1     1     1     1
原文链接:/mssql/74883.html

猜你在找的MsSQL相关文章