子集数值变量,但不是 R 中的因子



我想通过for循环计算线性混合效应模型,其中总是有硬编码的Y和随机效应。X变量(var.nam[i])将被循环通过。我编写了代码并且它正在工作(我相信),但我也想根据 X 变量 (var.nam[i]) 类型(数字、因子)对 X 变量 (var.nam[i]) 进行子集,其中:

当 X 变量 (var.nam[i]) 为数值时,排除所有等于 0 的观测值

当 X 变量 (var.nam[i]) 是因子时,不要子集 X 变量 (var.nam[i])

我的代码的简短示例在这里:

for(i in 1:length(var.nam)) {
formula[i] <- paste0("Y", "~", paste0(c(var.nam[i], c("Season"), 
c("Sex"), 
c("Age"), 
c("BMI"),
c("(1|HID)")), collapse="+"))
model <- lmer(formula[i], data = subset(data, paste0(c(var.nam[i])) != 0))
# loop continues...
}

正如现在所写的,它将对所有X变量(var.nam[i])进行子集,而不管类型如何。是否有任何解决方法或不同的方法来子集变量,在这种特定情况下有效?

在没有数据或完整的 for 循环的情况下,检查此解决方案是否有效有点困难。 根据您的问题,您希望有条件地进行子集,添加 if else 语句应该可以做到这一点:

for(i in 1:length(var.nam)) {
formula[i] <- paste0("Y", "~", paste0(c(var.nam[i], c("Season"), 
c("Sex"), 
c("Age"), 
c("BMI"),
c("(1|HID)")), collapse="+"))
data1 <- if(mode(var.nam[i]) == "numeric") {subset(data, paste0(c(var.nam[i])) !=0)} else {data} 
model <- lmer(formula[i], data = data1)
# loop continues...
}

相关内容

  • 没有找到相关文章

最新更新