我正在尝试使用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)
注意:如果有多个列,我们可以使用中的任何一种方法