我有以下数据框 df< - data.frame(Class = c(“S1”,“S1”,“s2”,“s2”,“S3”,“S3”,“S3”,“S3”),Brand = c(“B1 ”, “B2”, “B2”, “B3”, “B1”, “B2”, “B3”, “B4”))
我想计算两个类之间的常见品牌,并将输出显示为矩阵。输出的示例显示为here
感谢。
答案 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)