删除 R 中字符或因子变量的最后一个虚拟变量

Remove the last dummy of a character or factor variable in R

我借用了here

的一个小例子
df <- data.frame(letter = rep(c('a', 'b', 'c'), each = 2), y = 1:6)
library(caret)
dummy <- dummyVars(~ ., data = df, fullRank = TRUE, sep = "_")
head(predict(dummy, df))

##    letter_b letter_c y
##  1        0        0 1
##  2        0        0 2
##  3        1        0 3
##  4        1        0 4
##  5        0        1 5
##  6        0        1 6

但是,它给出了一个数据框,其中删除了因子变量 letter_a 的第一个虚拟变量。

我也试过 fastDummies::dummy_cols 如下:

head(fastDummies::dummy_cols(df, remove_selected_columns=TRUE, remove_first_dummy=TRUE))

    ##     y letter_b letter_c
##  1  1        0        0
##  2  2        0        0
##  3  3        1        0
##  4  4        1        0
##  5  5        0        1
##  6  6        0        1

但它只有一个 remove_first_dummy=TRUE 参数并且还删除了 letter_a。如何以一种简洁方便的方式删除 R 中因子变量 letter_c 的最后一个虚拟变量?

您可以使用 relevel 将引用设置为最后一个虚拟对象(在本例中 c):

library(caret)
df <- data.frame(letter = rep(c('a', 'b', 'c'), each = 2), y = 1:6)
df$letter <- relevel(factor(df$letter),ref = "c")
dummy <- dummyVars(~ ., data = df, fullRank = TRUE, sep = "_")
head(predict(dummy,df))

  letter_a letter_b y
1        1        0 1
2        1        0 2
3        0        1 3
4        0        1 4
5        0        0 5
6        0        0 6