R中频率的行到列

时间:2016-01-14 09:56:00

标签: r

我有一个看起来像这样的数据框

> initial
  Name Status
1    a    Win
2    b    Win
3    c   Loss

从这里我想要一个看起来像这样的数据框

> final
  Name Win Loss
1    a   1    0
2    b   1    0
3    c   0    1

我怎样才能实现这个目标

3 个答案:

答案 0 :(得分:1)

如何使用基本功能表?

initial=data.frame(name=c("a","b","c"),
                   status=c("win","loss","win"))
  name status
1    a    win
2    b   loss
3    c    win


table(initial)

  name loss win
   a    0   1
   b    1   0
   c    0   1

函数table返回一个表对象。要将其转换为您喜欢的data.frame类型,使用命令as.data.frame将无济于事,因为它会调度函数as.data.frame.table。相反,您应该将表格传递给as.data.frame.matrix

final_data_frame= as.data.frame.matrix(table(initial)) 

答案 1 :(得分:0)

使用model.matrix()创建列:

model.matrix(Name ~ -1 + Status, data = initial)

  StatusLoss StatusWin
1          0         1
2          0         1
3          1         0

答案 2 :(得分:0)

我们可以使用dcast

library(reshape2)
dcast(initial, Name~Status, value.var='Status', length)
#  Name Loss Win
#1    a    0   1
#2    b    0   1
#3    c    1   0