如何根据r中的某些因素创建二分变量?

时间:2016-07-14 08:10:51

标签: r

初始数据框是:

Factor1   Factor2   Factor3
  A           B        C
  B           C        NA
  A           NA       NA
  B            C        D
  E           NA       NA

我想根据上述因子变量创建5个二分变量。如果AFactor1Factor2包含Factor3,则规则应为新变量A,否则A应为0 , 等等。新创建的变量应如下所示:

A    B    C    D    E
1    1    1    0    0
0    1    1    0    0
1    0    0    0    0
0    1    1    1    0
0    0    0    0    1

1 个答案:

答案 0 :(得分:1)

我们可以使用table来执行此操作。我们使用列数unlist复制数据集的行序列并获取值的频率。

table(rep(1:nrow(df1), ncol(df1)), unlist(df1))
#    A B C D E
#  1 1 1 1 0 0
#  2 0 1 1 0 0
#  3 1 0 0 0 0
#  4 0 1 1 1 0
#  5 0 0 0 0 1

如果每行的值超过1,则转换为逻辑,然后将其重新转换为二进制。

 +(!!table(rep(1:nrow(df1), ncol(df1)), unlist(df1)))

数据

df1 <- structure(list(Factor1 = c("A", "B", "A", "B", "E"),
 Factor2 = c("B", 
"C", NA, "C", NA), Factor3 = c("C", NA, NA, "D", NA)), 
 .Names = c("Factor1", 
 "Factor2", "Factor3"), class = "data.frame", row.names = c(NA, -5L))