初始数据框是:
Factor1 Factor2 Factor3
A B C
B C NA
A NA NA
B C D
E NA NA
我想根据上述因子变量创建5个二分变量。如果A
或Factor1
或Factor2
包含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
答案 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))