我正在研究在pig脚本或R脚本中生成虚拟或二进制变量的设计思想
问题: 对猪脚本的输入:任意关系如下表所示
A B C
a1 b1 c1
a2 b2 c2
a1 b1 c3
假设我们必须基于B,C生成二进制列 输出应该是
A B C B.b1 B.b2 C.c1 C.c2 C.c3
a1 b1 c1 1 0 1 0 0
a2 b2 c2 0 1 0 1 0
a1 b1 c3 1 0 0 0 1
我认为编写UDF将是正确的方法。但是我不确定如何定义udf的输出模式,因为列名由用户提供,我们不知道需要生成多少个不同的cols。 有人可以指导我作为一个高水平的设计来实现它。在R中做是否可行我们是否有针对此统计问题的在线解决方案
答案 0 :(得分:1)
您可以在cSplit_e
library(splitstackshape)
尝试R
cSplit_e(cSplit_e(df, 'B', type='character', fill=0, 'binary'),
'C', type='character', fill=0, 'binary')
# A B C B_b1 B_b2 C_c1 C_c2 C_c3
#1 a1 b1 c1 1 0 1 0 0
#2 a2 b2 c2 0 1 0 1 0
#3 a1 b1 c3 1 0 0 0 1
答案 1 :(得分:1)
DF <- read.table(text="A B C
a1 b1 c1
a2 b2 c2
a1 b1 c3", header = TRUE)
do.call(cbind, list(DF,
model.matrix(~ 0 + B, data = DF),
model.matrix(~ 0 + C, data = DF)))
# A B C Bb1 Bb2 Cc1 Cc2 Cc3
#1 a1 b1 c1 1 0 1 0 0
#2 a2 b2 c2 0 1 0 1 0
#3 a1 b1 c3 1 0 0 0 1