2013-05-02 70 views
3

我是R.的新人。如果問題太愚蠢,請道歉。交叉表中的總和

我有一個樣本輸入數據表如下。

Column-1 Column-2 Column-3 
FF  FF  2 
NN  NN  5 
FF  FF  2 
NN  NN  1 
FN  FF  3 

輸出應該是

 FF FN NF NN 
    FF 4 0 0 0 
    FN 3 0 0 0 
    NF 0 0 0 0 
    NN 0 0 0 6 

我用表()函數,但只給出了 「數」,而不是 「求和」。感謝任何幫助!

回答

4

隨着鮮爲人知xtabs功能。您的數據:

l <- c("FF", "FN", "NF", "NN") 

data <- data.frame(
    Column1 = factor(c("FF", "NN", "FF", "NN", "FN"), levels = l), 
    Column2 = factor(c("FF", "NN", "FF", "NN", "FF"), levels = l), 
    Column3 = c(2, 5, 2, 1, 3)) 

xtabs(Column3 ~ ., data) 
#  Column2 
# Column1 FF FN NF NN 
#  FF 4 0 0 0 
#  FN 3 0 0 0 
#  NF 0 0 0 0 
#  NN 0 0 0 6 

輸出爲table,但你可以把它包裝成as.matrix得到matrix

+0

+1更簡單,很高興看到'xtabs'的行動。 – juba 2013-05-02 13:15:27

2

可以使用daply功能從plyr

R> daply(mydf, .(Column.1, Column.2), summarize, sum(Column.3)) 
     Column.2 
Column.1 FF NN 
     FF 4 NULL 
     FN 3 NULL 
     NN NULL 6 

這裏是與基礎R解決方案:

res <- with(mydf, 
    by(Column.3, list(Column.1, Column.2), FUN=sum)) 
res <- as.table(res) 
res[is.na(res)] <- 0 

其中給出:

FF NN 
FF 4 0 
FN 3 0 
NN 0 6 
+0

謝謝你們的迅速回復。很棒! – user961932 2013-05-02 14:30:37