【发布时间】:2015-03-16 09:48:43
【问题描述】:
我想将一个长 data.frame 制成表格。以下示例代码创建了一个长 data.frame,其中包含“ID”、“unit”和“mat”列。使用 dcast 我想为每个“垫子”创建一个带有新列的宽格式 data.frame,值应该是 1(这种组合存在)或 0(不,不存在......)。
df.long <- data.frame(ID = c(3, 4, 8, 9, 3, 4, 10, 3, 3, 4),
unit = c("cm", "cm", "m", "K", "cm", "cm", "m", "cm", "m", "cm"),
mat = c(1,1,1,1,2,2,2,3,3,3))
dcast(df.long, ID + unit ~ mat)
给我一个如下方式的数据框:
ID unit 1 2 3
1 3 cm 1 2 3
2 3 m NA NA 3
3 4 cm 1 2 3
4 8 m 1 NA NA
5 9 K 1 NA NA
6 10 m NA 2 NA
要让表格填充 1 和 0(按计划),我现在发现的唯一方法是在长 data.frame 中添加一个附加列,并使用“fun.aggregate = tabulate”作为附加 dcast 参数,即:
df.long <- data.frame(ID = c(3, 4, 8, 9, 3, 4, 10, 3, 3, 4),
unit = c("cm", "cm", "m", "K", "cm", "cm", "m", "cm", "m", "cm"),
mat = c(1,1,1,1,2,2,2,3,3,3),
value = c(1,1,1,1,1,1,1,1,1,1))
dcast(df.long, ID + unit ~ mat, fun.aggregate = tabulate)
ID unit 1 2 3
1 3 cm 1 1 1
2 3 m 0 0 1
3 4 cm 1 1 1
4 8 m 1 0 0
5 9 K 1 0 0
6 10 m 0 1 0
尽管它现在按预期工作,但我想知道是否有人有更好的方法,只使用 dcast 功能,而不改变初始 data.frame。
【问题讨论】: