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

R语言:如何提取不含指定字符串及NA的subject_id?

解决方案:筛选符合条件的subject_id

问题分析

需要提取edta_codes列不包含"4EDTA-3"(包括值为"NA"的行)对应的subject_id,目标结果为191-3457、191-1245、191-2365。

注意点

示例数据中的"NA"是字符串类型,而非R原生的NA值,以下方法针对该场景;如果是原生NA,会额外说明处理方式。


方法1:基础R实现

直接通过逻辑索引筛选行,再提取subject_id:

# 筛选条件:edta_codes不包含"4EDTA-3"(自动包含字符串"NA",因为grepl返回FALSE)
df$subject_id[!grepl("4EDTA-3", df$edta_codes)]

如果edta_codes中存在原生NA(非字符串),需要补充is.na判断:

df$subject_id[!grepl("4EDTA-3", df$edta_codes, na.rm = FALSE) | is.na(df$edta_codes)]

方法2:tidyverse(dplyr+stringr)实现

先过滤符合条件的行,再用pull提取subject_id,这是你需要的正确提取方式:

library(dplyr)
library(stringr)

df %>%
  filter(!str_detect(edta_codes, "4EDTA-3")) %>%
  pull(subject_id)

执行后会直接返回目标结果:

[1] "191-3457" "191-1245" "191-2365"

为什么之前pull失败?

你之前的操作只单独判断了edta_codes,没有先对整个数据框的行进行过滤,直接pull会提取所有subject_id。必须先通过filter(或基础R的索引)筛选出符合条件的行,再提取对应列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:35:23