4

我是 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

我使用了 table() 函数,但它只给出“count”,而不是“sum”。感谢任何帮助!

4

3 回答 3

5

具有鲜为人知的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

输出是 atable但您可以将其包装as.matrixmatrix.

于 2013-05-02T12:42:07.097 回答
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
于 2013-05-02T12:35:38.927 回答
0

对于未来的读者,您可以tapply()像这样使用函数

tapply(data$Column3, list(data$Column2, data$Column1), sum)

于 2019-10-03T06:21:40.923 回答