R语言中如何避免separate函数错误分割,正确去除蛋白质末尾的_l?
解决方案:正确分割以_l结尾的蛋白质名称
问题原因
你用separate(protein_exp, c("protein", "l"), "_l")出错,是因为separate()默认会匹配第一个出现的_l子串作为分隔符,导致像p_lr1_l这类包含多个_的名称被错误拆分。
方法1:用extract()精准捕获目标内容
使用正则表达式的捕获组,锚定字符串末尾的_l,直接提取前缀和后缀:
library(tidyr) # 示例数据 protein_exp <- tibble(protein = c("nr2_l", "nr1_l", "pkca_l", "p_lr1_l", "p_ln_l")) # 执行提取 protein_exp %>% extract(protein, into = c("protein", "suffix"), regex = "^(.*)(_l)$")
执行后结果:
| protein | suffix |
|---|---|
| nr2 | _l |
| nr1 | _l |
| pkca | _l |
| p_lr1 | _l |
| p_ln | _l |
方法2:直接去除末尾后缀(更简洁)
如果只需要得到去掉_l的蛋白质名称,不需要保留后缀列,用stringr包的str_remove()更直接:
library(stringr) protein_exp %>% mutate(protein_clean = str_remove(protein, "_l$"))
_l$中的$是正则锚点,确保只匹配字符串末尾的_l,不会误删中间的_l子串。
内容的提问来源于stack exchange,提问作者Drake
相关产品推荐
相关产品推荐

