如何使用tidyverse将NCBI_tax_id列含Adenoassociated的行替换为AD
正确修改列内字符串的方法
你用的rename_with()是用来重命名列名的,不是修改列里的内容,所以这个函数不适合你的需求。下面是两种可行的解决方式:
方式一:用tidyverse工具链(dplyr + stringr)
先加载需要的包,然后用mutate()配合字符串替换函数修改目标列:
library(dplyr) library(stringr) # 生成修改后的新数据框(不修改原数据) df_modified <- df %>% mutate(NCBI_tax_id = str_replace(NCBI_tax_id, "Adenoassociated.*", "AD"))
这里"Adenoassociated.*"是正则表达式,匹配所有以"Adenoassociated"开头的字符串,直接把整段内容替换成"AD",刚好满足你前3行变成"AD"的需求。
如果只是想替换字符串里的"Adenoassociated"部分(比如保留后面的病毒编号),可以改成:
str_replace(NCBI_tax_id, "Adenoassociated", "AD")
方式二:Base R 原生实现
不想加载额外包的话,用base R的gsub()函数直接修改:
# 直接修改原数据框的列 df$NCBI_tax_id <- gsub("Adenoassociated.*", "AD", df$NCBI_tax_id)
修改后效果
修改完成后,NCBI_tax_id列的前3行都会变成"AD",其余行保持原内容不变:
# 查看修改后的列 df_modified$NCBI_tax_id # 输出结果: # [1] "AD" "AD" "AD" # [4] "BK polyomavirus" "Camelpox virus" "Chimpanzee adenovirus Y25"
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

