R语言如何判断字符串含括号且括号内数值大于0
实现代码
你可以借助stringr做正则匹配提取数值,结合dplyr做列处理,代码可直接复现你的需求:
1. 加载依赖包
library(dplyr) library(stringr)
2. 构造示例数据(你自己用的时候替换成你的数据集即可)
df <- data.frame( `Column 1` = c( "Q9H7C4 1xPhospho [S325(100)]", "P11169 1xPhospho [S485(88.2)]", "Q9UK59 1xPhospho [S/T]", "Q8WW12 1xPhospho [S119(100)]" ), check.names = FALSE )
3. 按条件生成新列
df <- df %>% mutate( # 提取小括号内的数值(支持整数、小数格式) bracket_val = as.numeric(str_extract(`Column 1`, "\\((\\d+\\.?\\d*)\\)", group = 1)), # 满足「存在括号内数值且数值>0」则保留原内容,否则填充NA `New Column` = ifelse(!is.na(bracket_val) & bracket_val > 0, `Column 1`, NA_character_) ) %>% # 移除中间辅助列,不需要可注释掉 select(-bracket_val)
基础R版本(无需安装额外包)
df$`New Column` <- ifelse( grepl("\\(\\d+\\.?\\d*\\)", df$`Column 1`), { num <- as.numeric(sub(".*\\((\\d+\\.?\\d*)\\).*", "\\1", df$`Column 1`)) ifelse(num > 0, df$`Column 1`, NA_character_) }, NA_character_ )
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

