2011-08-10 59 views
2

我有一個鍵/值對列表,並希望將其轉換爲2d矩陣,其中單元格表示每個鍵/值組合的計數。下面是一個示例數據幀daply自定義輸出對象值

doc_id,link 
1,http://example.com 
1,http://example.com 
2,http://test1.net 
2,http://test2.net 
2,http://test5.net 
3,http://test1.net 
3,http://example.com 
4,http://test5.net 

此刻,我使用的r plyr封裝及其那種變換的以下命令:

link_matrix <- daply(link_list, .(doc_id, link), summarise, nrow(piece)) 

下面是結果矩陣對象:

doc_id http://example.com http://test1.net http://test2.net http://test5.net 
    1 List,1    NULL    NULL    NULL    
    2 NULL    List,1   List,1   List,1   
    3 List,1    List,1   NULL    NULL    
    4 NULL    NULL    NULL    List,1 

生成的數組條目很好 - 它們給我的鍵/值計數;但我實際需要的是結果矩陣中的數值。它應該是這樣的:

doc_id http://example.com http://test1.net http://test2.net http://test5.net 
    1 2     0    0    0    
    2 0     1    1    1   
    3 1     1    0    0    
    4 0     0    0    0 

我可以通過遍歷矩陣元素,並進行必要的轉換做到這一點,但我敢肯定有一個更好的解決方案,讓我直接做在daply功能。我只是沒有想出如何和欣賞這方面的幫助。

回答

3

你可以通過你的代碼如下簡化做到這一點(即刪除summarise):

daply(link_data, .(doc_id, link), nrow) 

doc_id http://example.com http://test1.net http://test2.net http://test5.net 
    1     2    NA    NA    NA 
    2     NA    1    1    1 
    3     1    1    NA    NA 
    4     NA    NA    NA    1 

然後,如果去除NA值是很重要的,使用數組子集:

aa <- daply(link_data, .(doc_id, link), nrow) 
aa[is.na(aa)] <- 0 
aa 

     link 
doc_id http://example.com http://test1.net http://test2.net http://test5.net 
    1     2    0    0    0 
    2     0    1    1    1 
    3     1    1    0    0 
    4     0    0    0    1 
+0

cool,thx。有用.. – behas

0

使用cast功能從reshape

library(reshape) 
cast(transform(mydf, value = 1), doc_id ~ link)