2013-05-02 63 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