如何用filter排除数据框中属于指定列表的猪只数据?
过滤CT扫描数据:排除指定猪只样本
问题背景
我手头有一批猪只的CT扫描数据,需要排除扫描时年龄过大的样本。数据包含随时间变化的多组扫描记录(涵盖气道面积、直径等指标),每头猪对应数百条给药/未给药的观测数据,总计涉及17头猪:
df %>% distinct(pig) # A tibble: 17 × 1 pig <fct> 1 29-10 2 29-9 3 31-1 4 31-3 5 29-1 6 29-2 7 29-5 8 29-4 9 29-6 10 100-1 11 100-3 12 107-1 13 107-11 14 107-2 15 107-3 16 107-4 17 107-5
需要排除的猪只为:29-1, 29-2, 29-4, 29-5, 29-6。目前可以通过逐个写!=实现过滤,但希望创建一个可复用的排除列表,实现与filter(pig %in% excluded)相反的筛选效果,尝试使用!运算符但没掌握正确语法。
解决方案
只需在%in%运算符前添加!,即可筛选出不在排除列表中的样本。为了可读性,建议把pig %in% excluded用括号包裹:
# 定义可复用的排除列表 excluded <- c("29-1", "29-2", "29-4", "29-5", "29-6") # 过滤掉排除列表中的猪只 filtered_df <- df %>% filter(!(pig %in% excluded)) # 验证剩余猪只 filtered_df %>% distinct(pig)
说明
!(pig %in% excluded)的逻辑是:筛选出不属于排除列表的pig记录,一次性完成所有指定猪只的排除。这种方式比逐个写!=更简洁,后续修改排除名单时,只需更新excluded向量即可,维护性更强。
内容的提问来源于stack exchange,提问作者gromanoibarra
相关产品推荐
相关产品推荐

