1

我有以下数据框“myData”

  NAME GAME    STATUS
1 aaa  poker   PASSED
2 bbb  poker   FAILED
3 aaa  tennis  PASSED
4 bbb  tennis  PASSED

我想要以下输出

  NAME  FAILED PASSED TOTAL
1 aaa     0      2      2
2 bbb     1      1      2

我尝试了以下代码

myResult <- as.data.frame(table(myData[,c("NAME","STATUS")]))

上面的代码给了我

  NAME  STATUS   Freq
1 aaa   FAILED   0
2 aaa   PASSED   2
3 bbb   FAILED   1
4 bbb   PASSED   1

在这一点上,我不确定如何旋转“myResult”以获得我需要的格式。有任何想法吗?

4

2 回答 2

2

这是具有基本 R 功能的解决方案:

myResult <- as.data.frame(unclass(xtabs( ~ NAME + STATUS, myData)))
myResult$TOTAL <- rowSums(myResult)


    FAILED PASSED TOTAL
aaa      0      2     2
bbb      1      1     2
于 2012-11-21T20:02:34.293 回答
1

对于这类事情,我经常使用dcastreshape2

dat <- read.table(text = "  NAME GAME    STATUS
1 aaa  poker   PASSED
2 bbb  poker   FAILED
3 aaa  tennis  PASSED
4 bbb  tennis  PASSED",header = TRUE,sep = "",row.names = 1)

library(reshape2)
dcast(dat,NAME~STATUS,
        fun.aggregate = length,
        value.var = "STATUS",
        margins = "STATUS")
于 2012-11-21T19:42:13.947 回答