如何使用dplyr过滤感染数据集,保留无感染及1年内感染的样本?
筛选感染数据集:保留未感染样本及1年内感染样本
需求说明
我有一个感染相关的数据集,希望最终数据集同时包含未感染和感染的样本,但需要移除**感染发生时间超过1年(365天)**的样本。
示例数据
| 感染情况 0=未感染 1=感染(SSI) | 感染发生天数(TTI) |
|---|---|
| 0 | NA |
| 1 | 24 |
| 1 | 450 |
预期结果
| 感染情况 0=未感染 1=感染(SSI) | 感染发生天数(TTI) |
|---|---|
| 0 | NA |
| 1 | 24 |
错误尝试
我原本运行的代码:
dt_one_year <- dt %>% filter(TTI %in% 0:365)
这段代码错误地移除了未感染的行和感染超1年的行,我需要的是保留未感染的行和感染发生在1年内的行,请问如何用dplyr实现仅移除SSI=1且TTI>365的样本?
解决方案
正确代码
使用dplyr的filter函数,通过明确的逻辑条件实现需求:
dt_one_year <- dt %>% filter(SSI == 0 | (SSI == 1 & TTI <= 365))
逻辑说明
- 原代码的问题:
TTI %in% 0:365会直接过滤掉TTI为NA的未感染样本,且没有区分感染状态,不符合需求。 - 新逻辑拆解:
SSI == 0:保留所有未感染样本(不管TTI是否为NA)(SSI == 1 & TTI <= 365):仅保留已感染且感染天数≤365天的样本- 用逻辑或(
|)将两个条件组合,确保符合任一条件的样本都被保留
内容的提问来源于stack exchange,提问作者Philyswiss
相关产品推荐
相关产品推荐

