2014-03-18 86 views
0

我有一個問題,我知道如何解決使用SQL,但我正在尋求實施一個解決方案R與一個新的數據集。我一直在試圖找出reshape2軟件包中的一些東西,但是我沒有想到要完成的任何運氣。這是我的問題:對組內觀察

我有一個數據集,我需要查看在另一個組內的所有項目對。我已經在下面創建了一個玩具示例來進一步解釋。

BUNCH FRUITS 
1  apples 
1  bananas 
1  mangos 
2  apples 
3  bananas 
3  apples 
4  bananas 
4  apples 

我想要的是所有可能的對的列表,並總結它們在一堆中出現的頻率。我的輸出將如下所示:

FRUIT1 FRUIT2  FREQUENCY 
APPLES BANANAS 3 
APPLES MANGOS  1 

我的最終目標是製作一些東西,我最終可以導入Gephi進行網絡分析。爲此,我需要一個源和目標列(又名FRUIT1和FRUIT2)。

在SQL原來的解決方案是在這裏是否會幫助任何人:PROC SQL in SAS - All Pairs of Items

回答

0

下似乎有效:

tmp = table(DF$FRUITS, DF$BUNCH) != 0 
#> tmp   
#    1  2  3  4 
# apples TRUE TRUE TRUE TRUE 
# bananas TRUE FALSE TRUE TRUE 
# mangos TRUE FALSE FALSE FALSE 

do.call(rbind, 
     combn(unique(as.character(DF$FRUITS)), 
       2, 
       function(x) data.frame(fr1 = x[1], 
            fr2 = x[2], 
            freq = sum(colSums(tmp[x, ]) == 2)), 
       simplify = F)) 
#  fr1  fr2 freq 
#1 apples bananas 3 
#2 apples mangos 1 
#3 bananas mangos 1 

其中DF

DF = structure(list(BUNCH = c(1L, 1L, 1L, 2L, 3L, 3L, 4L, 4L), FRUITS = structure(c(1L, 
2L, 3L, 1L, 2L, 1L, 2L, 1L), .Label = c("apples", "bananas", 
"mangos"), class = "factor")), .Names = c("BUNCH", "FRUITS"), class = "data.frame", row.names = c(NA, 
-8L)) 
+0

我得到一個錯誤'在tmp [x,]:下標越界時嘗試這個解決方案。 – pmbaumgartner

+0

@ user3033896:嗯,你的意思是應用於你的數據或者當你複製粘貼上述內容?在新的會話中,如果我複製'DF'和它上面的代碼,它對我來說工作正常。如果是第一種情況,您能否在發生此錯誤的地方發佈樣本? –