You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何基于迭代Flag_Posbefored列筛选测试数据集?

问题原因

你循环里用!!name时,name是字符串类型,而!!只能解析符号对象,无法直接把字符串转换成数据框的列名。这导致你的筛选条件实际是在判断字符串等于0或为NA,自然返回空数据框。

解决方法

方法1:将字符串转为符号后引用

用rlang::sym()把拼接出的列名字符串转换成符号,再用!!注入筛选条件:

library(dplyr)
library(rlang)

# 用列表存储各时间段结果,避免循环覆盖
result_list <- list()

for(i in 1:81){
  name_sym <- sym(paste("Flag_Posbefored", i, sep=""))
  current_result <- Dates_try %>%
    filter(
      TestDate >= Testing_Dates$Start.Date[i],
      TestDate <= Testing_Dates$End.Date[i],
      (!!name_sym == 0 | is.na(!!name_sym))
    )
  result_list[[i]] <- current_result
}

方法2:使用.data代词(更简洁)

dplyr提供的.data代词可直接通过字符串引用列,无需转换符号:

library(dplyr)

result_list <- list()

for(i in 1:81){
  name <- paste("Flag_Posbefored", i, sep="")
  current_result <- Dates_try %>%
    filter(
      TestDate >= Testing_Dates$Start.Date[i],
      TestDate <= Testing_Dates$End.Date[i],
      (.data[[name]] == 0 | is.na(.data[[name]]))
    )
  result_list[[i]] <- current_result
}
额外提示

原代码中每次循环都将结果赋值给PerPos_1,会覆盖之前的结果。建议用列表result_list存储各时间段的筛选结果,后续可通过result_list[[1]]、result_list[[2]]等调用对应周的数据。

内容的提问来源于stack exchange,提问作者Almoss277

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:27:24