假设我们有一个数值变量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... "谢谢!
发布于 2021-10-02 21:10:35
为什么你不能这样做呢:
age_factor <- function(x){
if (x <= 34) {
y <- "18_34"
} else {
y <- "35_49"
}
return(y)
}
age_factor(32)
[1] "18_34"发布于 2021-10-22 08:06:28
使用与您编写的语法相近的语法:
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"))注意:参数output = " factor“将给出一个无序因子;您可以将其设置为其他值,例如有序因子、整数等。
祝您工作愉快!:-)
https://stackoverflow.com/questions/69419061
复制相似问题