as.factor无法将数值变量转换为类别变量

  • 本文关键字:变量 转换 factor as r
  • 更新时间 :
  • 英文 :


我正在尝试使用as.factor将一些数值变量转换为分类变量,但不起作用。由于我是一个相对较新的R用户,所以我不确定我的代码。当我尝试运行回归模型时,结果也显示了数值变量。有人有什么建议吗?

as.factor(data$race_fup)
is.factor(data$sex)
str(data)

$ sex             : num [1:812] 0 0 1 0 0 0 1 1 1 1 ...
$ race_fup        : num [1:812] 1 3 2 3 2 2 3 3 3 3 ...
$ education_degree: num [1:812] 2 1 3 4 2 0 1 4 6 7 ...
GLM.1 <- glm(intubation ~ sex + education_degree + race_fup, family = binomial(logit) , data=data)```
Warning message:
glm.fit: probabilidades ajustadas numericamente 0 ou 1 ocorreu 
summary(GLM.1)
Call:
`glm(formula = intubation ~ sex + education_degree + race_fup, 
family = binomial(logit), data = data)`
Deviance Residuals: 
Min       1Q   Median       3Q      Max  
-1.0701  -1.0002  -0.9472   1.3353   1.5188  
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept)      -2.577e-01  1.514e-01  -1.702   0.0888
sex              -3.769e-02  1.455e-01  -0.259   0.7956
education_degree -6.837e-02  3.877e-02  -1.764   0.0778
race_fup         -6.052e-05  5.799e-04  -0.104   0.9169

(Intercept)      .
sex               
education_degree .
race_fup          
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1074.1  on 806  degrees of freedom
Residual deviance: 1069.9  on 803  degrees of freedom
(5 observations deleted due to missingness)
AIC: 1077.9
Number of Fisher Scoring iterations: 6

有些函数会发生变化,即如果我们在data.table中使用:=,它会修改原始对象或set函数,即setDT-将原始对象从data.frame转换为data.table

library(data.table)
nm1 <- c("race_fup", "sex")
setDT(data)[, (nm1) := lapply(.SD, as.factor), .SDcols = nm1]

或者另一个选项是来自magrittr的复合赋值运算符(%<>%(

library(dplyr)
library(magrittr)
data %<>%
mutate(across(c(race_fup, sex), as.factor))

而如果我们使用%>%,它不会改变原始对象,除非我们分配(<-(在开始时(

data <- data %>%
mutate(across(c(race_fup, sex), as.factor))

->(在末端((

data %>%
mutate(across(c(race_fup, sex), as.factor)) -> data

base R中,在不进行任何赋值的情况下,原始对象保持相同的

data[c('race_fup', 'sex')] <- lapply(data[c('race_fup', 'sex')], as.factor)

注意:如果有多个列,我们可以使用中的任何一种方法

最新更新