删除 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
我借用了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