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

时间:2019-06-03 16:09:39

标签: r r-caret dummy-variable

以下代码试图在插入符号包中使用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)的数据帧,但它返回的是double值,例如0.6324555。 而且b.vars中的列名不正确 例如,有“ cut.L”而不是“ cut.fair”

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

1 个答案:

答案 0 :(得分:0)

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

摆脱变量的“有序”类。为此,您可以先将变量转换为字符,然后立即转换为因数。