R语言如何通过列号而非列名执行filter数据筛选操作
修正后的R代码(按原表第12列筛选28天病例数据)
原代码直接使用列号报错是因为dplyr默认非标准求值规则会将数字识别为常量而非列索引;且如果先执行select操作,筛选时的数据集仅包含3列,不存在第12列会触发索引越界。
适配所有日期类型的通用代码
TableOutput <- Table %>% # 先按原表第12列(日期列)筛选最近28天数据 filter(between(.[[12]], max(.[[12]]) - 27, max(.[[12]]))) %>% # 再选中需要输出的列,12对应原表的日期列 select(areaType, 12, cases)
代码说明
.是dplyr管道操作里的占位符,指代上一步传入的完整数据集,.[[12]]即取传入数据集的第12列值- 把筛选逻辑放在select之前,避免列索引失效问题
- 用
between()函数替代%in%生成序列的写法,兼容Date格式、数值时间戳等多种日期存储类型,不会出现类型转换异常
如果你的业务逻辑需要先选列再筛选,可以按select后的列索引调整,示例如下:
TableOutput <- Table %>% select(areaType, 12, cases) %>% # select后第二列为日期列,所以用索引2 filter(between(.[[2]], max(.[[2]]) -27, max(.[[2]])))
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

