【发布时间】:2019-03-25 04:18:57
【问题描述】:
我想对我的变量进行一次热编码,只针对顶级类别以及 NA 和“其他”。
所以在这个简化的例子中,热编码 b where freq > 1 and NA:
id <- c(1, 2, 3, 4, 5, 6)
b <- c(NA, "A", "C", "A", "B", "C")
c <- c(2, 3, 6, NA, 4, 7)
df <- data.frame(id, b, c)
id b c
1 1 <NA> 2
2 2 A 3
3 3 C 6
4 4 A NA
5 5 B 4
6 6 C 7
table <- as.data.frame(table(df$b))
Var1 Freq
1 A 2
2 B 1
3 C 2
table_top <- table[table$Freq > 1,]
Var1 Freq
1 A 2
3 C 2
现在,我想要这样的东西
id b_NA c b_A b_C b_Others
1 1 2 0 0 0
2 0 3 1 0 0
3 0 6 0 1 0
4 0 NA 1 0 0
5 0 4 0 0 1
6 0 7 0 1 0
我已经尝试使用子集 df
table_top <- as.vector(table_top$Var1)
table_only_top <- subset(df, b %in% table_top)
table_only_top
a b c
2 1 A 3
3 2 C 6
4 2 A NA
6 3 C 7
但是,现在我不知道如何获得输出。在我的真实数据中,我有比这里更多的类别,因此不能选择使用输出中的名称。我的真实输出中的其他类别也存在许多类别。
高度赞赏任何提示:)
【问题讨论】:
标签: r one-hot-encoding