在R中透视标称数据

时间:2015-02-11 21:51:39

标签: r

我在R中有一个我需要操作(数据透视)的数据框。在最简单的级别,前几行将如下所示:

Batch  Unit  Success InputGrouping
1       1     1       A
2       5     1       B
3       4     0       C
1       1     1       D
2       5     1       A

我想调整此数据,以便列名称为InputGrouping,如果存在则值为1,否则为0。使用上面:

Batch  Unit  Success  A   B  C  D
1       1     1       1   0  0  1
2       5     1       1   1  0  0
3       4     0       0   0  1  0

我看过reshape / cast但是无法弄清楚这个转换是否可以用于包。任何建议都将非常感谢。

2 个答案:

答案 0 :(得分:5)

使用reshape2函数dcast()确实可以实现这一点。

重新创建数据:

dat <- read.table(header=TRUE, text="
Batch  Unit  Success InputGrouping
1       1     1       A
2       5     1       B
3       4     0       C
1       1     1       D
2       5     1       A")

现在重铸数据:

library("reshape2")

dcast(Batch + Unit + Success ~ InputGrouping, data=dat, fun.aggregate = length)

结果:

Using InputGrouping as value column: use value.var to override.
  Batch Unit Success A B C D
1     1    1       1 1 0 0 1
2     2    5       1 1 1 0 0
3     3    4       0 0 0 1 0

答案 1 :(得分:4)

以下是使用data.table

的可能解决方案
library(data.table)
setDT(df)[, as.list(table(InputGrouping)), by = .(Batch, Unit, Success)]
#    Batch Unit Success A B C D
# 1:     1    1       1 1 0 0 1
# 2:     2    5       1 1 1 0 0
# 3:     3    4       0 0 0 1 0