2017-01-26 36 views
0

我有以下數據幀 df < - data.frame(Class = c(「S1」,「S1」,「s2」,「s2」,「S3 S3「,」S3「),品牌= c(」B1「,」B2「,」B2「,」B3「,」B1「,」B2「,」B3「,」B4「 ))R-幫助創建矩陣以找到相似的值

我想計算兩個類之間的常見品牌並將輸出顯示爲矩陣。顯示輸出示例here

謝謝。

+0

您可能需要'table(df)' – akrun

+3

您想「列出品牌」,但是在需要的輸出中,沒有品牌列表。請解釋一下,輸出是如何構建的。什麼是「上面給出的矩陣」? – Bernhard

+0

我不希望品牌上市,而只是產品中常見品牌的數量。輸出附加在鏈接中。 (點擊'輸出')謝謝。 – pns123

回答

0

我敢肯定有更優雅的解決方案,但是這給你想

該文件包含了品牌的唯一值列表中的結果,爲每個類。

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

共享品牌元素數的計數,即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) 
+0

謝謝胡安。這工作。我在這裏交換了品牌和品牌 - > tapply(df $ Class,df $品牌,獨特)。我共有378個班級和209個品牌,有沒有辦法縮短處理時間,因爲花了2分鐘時間。 – pns123

+0

嘗試使用'parallel'包,我認爲它可以幫助計算時間。 –

+0

謝謝胡安。將嘗試並行軟件包。 – pns123