【发布时间】:2019-11-21 15:47:45
【问题描述】:
我正在尝试从多行字符串中“删除”特定字符。
我能够从列中提取我想要“删除”的特定字符,但我无法将它们递归地替换为“”。
我尝试了mapvalues、gsub 和str_replace 的一些选项,但我没有运气
#Example data
test_col<-data.frame(sequence=c("ATGCRYSW\n",
"ATGCRYSW\\n",
"ATGCRYSW\r\n",
"ATGCRYSW\r\nATGCRYSW",
"ATGCRYSW"),
stringsAsFactors = FALSE)
#vector of allowed characters in strings
permitted_seq_chars<-c("A","C","G","T","R","Y","S","W","K",
"M","B","D","H","V","N","+","-","X")
#get all the unique characters in column of interest
all_unique_source_seq_chars<-unique(unlist(strsplit(test_col[["sequence"]],
split ="")))
#subset invalid characters
all_unique_source_seq_invalid_chars<-setdiff(all_unique_source_seq_chars,
permitted_seq_chars )
#'delete' invalid characters one by one. So far the only way I've been able to
# do so, but i would like to not depend on fixed variables if new ones arise
# in the future
str_replace_all(test_col$sequence, c( "\n"= "",
"\\"="",
"n"=""))
有什么方法可以递归地执行此操作,只需查看all_unique_source_seq_invalid_chars?
【问题讨论】:
-
你需要
pat <- paste0("[^", paste(permitted_seq_chars, collapse=""), "]") ; gsub(pat, "", test_col$sequence)