在Pig \ R中生成二进制变量

时间:2014-12-29 18:15:27

标签: r apache-pig

我正在研究在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中做是否可行我们是否有针对此统计问题的在线解决方案

2 个答案:

答案 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