在pig中生成二进制变量\r\n

5hcedyr0  于 2021-06-25  发布在  Pig
关注(0)|答案(2)|浏览(337)

我正在研究在pig脚本或r脚本中生成虚拟变量或二进制变量的设计思想
问题:输入到pig脚本:任何任意关系如下表所示

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

我认为写自定义项是正确的方法。但是,我不知道如何定义自定义项的输出模式,因为列名是由用户提供的,我们不知道在关系中需要生成多少不同的列。请有人指导我作为一个高水平的设计来实现它。我们有没有在线解决这个统计问题的方法

vaqhlq81

vaqhlq811#

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
mec1mxoz

mec1mxoz2#

你可以试试 cSplit_elibrary(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

相关问题