R-帮助创建用于查找相似值的矩阵

时间:2017-01-26 14:00:46

标签: r matrix

我有以下数据框 df< - data.frame(Class = c(“S1”,“S1”,“s2”,“s2”,“S3”,“S3”,“S3”,“S3”),Brand = c(“B1 ”, “B2”, “B2”, “B3”, “B1”, “B2”, “B3”, “B4”))

我想计算两个类之间的常见品牌,并将输出显示为矩阵。输出的示例显示为here

感谢。

1 个答案:

答案 0 :(得分:0)

我确信有更优雅的解决方案,但这会给你想要的结果

包含每个类的品牌唯一值的列表。

my_list <- tapply(df$Class, df$Brand, unique)

共享Brand元素的数量,即Class的交集。这存储在一个矩阵中。

my_matrix <- do.call(what = cbind, 
                     args = lapply(1:length(my_list), function(x){
                       lapply(1:length(my_list), function(y){
                         length(intersect(my_list[[x]], my_list[[y]]))
                       })
                     })
    )

为清晰起见,可以命名结果矩阵。

colnames(my_matrix) <- unique(df$Class)
rownames(my_matrix) <- unique(df$Class)