dummyVars 函数返回数据类型双精度值

dummyVars function returning data type double values

以下代码试图使用 caret 包中的 dummyVars 函数。 这是 .rmd 代码并使用 ggplot2 包中可用的数据集,因此可以完全复制。

```{r}
#rm(list = ls())
```

```{r}
library(ggplot2)
```

```{r}
data("diamonds")
```

```{r}
data <- diamonds
summary(data)
str(data)
```
```{r}
library(caret)
```

```{r}
dmy <- dummyVars(formula = ~ cut + color + clarity, 
                 data = data, 
                 fullRank = FALSE)

b.vars <- data.frame(predict(dmy, newdata = data))

head(b.vars, n = 10)
```

b.vars 应该是虚拟变量(0s 和 1s)的数据框,但它返回双精度值,例如 0.6324555。 b.vars 中的列名也不正确 例如 "cut.L" 而不是 "cut.fair"

这与我过去使用的过程相同,但我不明白我做错了什么。有人可以指出我的错误。 谢谢!

library(ggplot2)
library(caret)
data("diamonds")
data <- diamonds
data
summary(data)
str(data)

data$cut <- as.factor(as.character(data$cut))
data$clarity <- as.factor(as.character(data$clarity))
data$color <- as.factor(as.character(data$color))


sapply(data, class)


dmy <- dummyVars(formula = ~ cut + color + clarity, 
                 data = data, 
                 fullRank = TRUE)
    b.vars <- data.frame(predict(dmy, newdata = data))
head(b.vars, n = 10)

   cut.Good cut.Ideal cut.Premium cut.Very.Good color.E color.F color.G color.H color.I color.J clarity.IF clarity.SI1 clarity.SI2 clarity.VS1 clarity.VS2 clarity.VVS1
1         0         1           0             0       1       0       0       0       0       0          0           0           1           0           0            0
2         0         0           1             0       1       0       0       0       0       0          0           1           0           0           0            0
3         1         0           0             0       1       0       0       0       0       0          0           0           0           1           0            0
4         0         0           1             0       0       0       0       0       1       0          0           0           0           0           1            0
5         1         0           0             0       0       0       0       0       0       1          0           0           1           0           0            0
6         0         0           0             1       0       0       0       0       0       1          0           0           0           0           0            0
7         0         0           0             1       0       0       0       0       1       0          0           0           0           0           0            1
8         0         0           0             1       0       0       0       1       0       0          0           1           0           0           0            0
9         0         0           0             0       1       0       0       0       0       0          0           0           0           0           1            0
10        0         0           0             1       0       0       0       1       0       0          0           0           0           1           0            0
   clarity.VVS2
1             0
2             0
3             0
4             0
5             0
6             1
7             0
8             0
9             0
10            0

删除变量的 "ordered" class。您可以通过首先将变量转换为字符然后动态转换回因子来做到这一点。