我在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但是无法弄清楚这个转换是否可以用于包。任何建议都将非常感谢。
答案 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