sql – 独特的组合频率
发布时间:2020-05-23 05:56:03 所属栏目:MsSql 来源:互联网
导读:我有一个10列的数据集.第一列是唯一标识符.其他9列是相关属性.现在,让我们说它们是整数.如果需要,可以轻松地将数据转换为键值. 例如: id|attr1|attr2|attr3|...a | 2 | 5 | 7 |...b | 3 | 1 |null |...c | 2 |null |null |...d | 1 | 2 | 5 |...e | 2
|
我有一个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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
