Я хочу одно горячее кодирование моих переменных только для верхних категорий и NA и «другие».
Так что в этом упрощенном примере горячее кодирование b, где freq> 1 и 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
Однако, теперь я застрялкак добраться до выхода.В моих реальных данных у меня намного больше категорий, чем здесь, поэтому использование имен из вывода не вариант.Кроме того, категория «Другие» в моем реальном выводе существует из многих категорий.
Любая подсказка высоко ценится:)