假设我们有一个数字变量age
,它有时会丢失。在使用它来预测其他变量时,我们希望允许非线性,因此我们创建age_factor
。被动归罪于age_factor
:https://www.gerkovink.com/miceVignettes/Passive_Post_processing/Passive_imputation_post_processing.html
但是语法是如何工作的呢?比如:
method["age_factor"] <- "~ 18_34 if age <= 34,
35_49 if age <= 49... "
谢谢你!
使用的语法与你写的很接近:
method["age_factor"] <- "~ ifelse(is.na(age), NA,
ifelse(age < 20, 'under 20',
ifelse(age < 25, '20 to 24',
ifelse(age < 35, '25 to 34',
'35 and over'))))"
我将NA包含在可能的结果中,因为估算有时会返回NA。(另外,您需要将因子级别名称括在单引号中,因为表达式作为一个整体被括在双引号中,否则R会认为您的age_factor代码过早结束。)
然而——在这种情况下,我会避免ifelse(),更喜欢cutr::smart_cut(),因为它的简单性和抵抗难以发现的语义错误:
require(cutr)
cuts <- c(-Inf, 20, 25, 35, Inf)
imp$age_factor <- with(imp, smart_cut(age, cuts,
labels = c('under 20', '20 to 24', '25 to 34', '35 and over'), output = "factor"))
注意参数输出= "factor"会给你一个无序因素;您可以将其设置为其他值,例如有序因子,整数等。
冠之快乐!: -)
为什么你不能那样做呢:
age_factor <- function(x){
if (x <= 34) {
y <- "18_34"
} else {
y <- "35_49"
}
return(y)
}
age_factor(32)
[1] "18_34"