我在数据帧上使用 reshape2 函数 dcast 。其中一个变量是某些级别未出现在数据框中的因素,但我会将所有值包含在创建的新列中。
例如,假设我运行以下命令
library(reshape2)
dataDF <- data.frame(
id = 1:6,
id2 = c(1,2,3,1,2,3),
x = c(rep('t1', 3), rep('t2', 3)),
y = factor(c('A', 'B', 'A', 'B', 'B', 'C'), levels = c('A', 'B', 'C', 'D')),
value = rep(1)
)
dcast(dataDF, id + id2 ~ x + y, fill = 0)
我得到以下内容
id id2 t1_A t1_B t2_B t2_C
1 1 1 1 0 0 0
2 2 2 0 1 0 0
3 3 3 1 0 0 0
4 4 1 0 0 1 0
5 5 2 0 0 1 0
6 6 3 0 0 0 1
但我还想包括列 t1_C、t1_D、t2_A 和 t2_D 全部为 0
即我想要以下内容
id id2 t1_A t1_B t1_C t1_D t2_A t2_B t2_C t2_D
1 1 1 1 0 0 0 0 0 0 0
2 2 2 0 1 0 0 0 0 0 0
3 3 3 1 0 0 0 0 0 0 0
4 4 1 0 0 0 0 0 1 0 0
5 5 2 0 0 0 0 0 1 0 0
6 6 3 0 0 0 0 0 0 1 0
另外,作为辅助,是否可以在初始数据帧中的“值”列不充满的情况下创建上述内容。基本上只想将 x 和 y 投射到它们自己的列中,如果它们存在于该 id 中,则将其转换为 1。
提前致谢
编辑:
最初 LHS 上有一个变量,杰里米在下面回答,但实际上 LHS 上有多个变量,因此编辑了问题以反映这一点