我正在处理单个单元格数据。
我正在尝试将提取的细胞条形码与其他数据进行匹配,但是条形码的结构不同。
我提取的条形码:,"SAMPLE_AAAGCAAAGATACACA-1_1"
(很奇怪,它以逗号开头保存了)
我想要的条形码:SAMPLE_AAAGCAAAGATACACA.1_1
当我尝试删除<,“>替换这些时,需要使用哪些功能?
答案 0 :(得分:3)
这是您想要的吗?
数据:
x <- ',"SAMPLE_AAAGCAAAGATACACA-1_1"'
解决方案:
cat(gsub(',', '', gsub('(?<=[A-Z])-(?=\\d)', '\\.', x, perl = T)))
"SAMPLE_AAAGCAAAGATACACA.1_1"
在这里,我们使用“嵌套” gsub
首先将连字符更改为句点,然后删除逗号。
如果需要不带双引号的话:
cat(gsub(',"|"$', '', gsub('(?<=[A-Z])-(?=\\d)', '\\.', x, perl = T)))
SAMPLE_AAAGCAAAGATACACA.1_1
答案 1 :(得分:0)
以下是一些替代方法。
1)宪章/修剪假设下面的测试数据v
。然后,使用chartr
用减号替换每个破折号,然后使用trimws
去除两端的所有逗号和双引号。如果您使用的R版本非常旧,则需要升级,因为whitespace=
参数是最近才添加的。不使用任何软件包。
请注意,输出中显示的双引号不是字符串的一部分,而只是R显示字符向量的方式。
# test input
v <- c(',"SAMPLE_AAAGCAAAGATACACA-1_1"', ',"SAMPLE_AAAGCAAAGATACACA-1_1"')
trimws(chartr("-", ".", v), whitespace = '[,"]')
## [1] "SAMPLE_AAAGCAAAGATACACA.1_1" "SAMPLE_AAAGCAAAGATACACA.1_1"
2)gsubfn gsubfn
可以在一个命令中将所有减号映射为点和逗号,将双引号映射为空字符串。第二个参数定义映射。
这将替换所有双引号,逗号和减号。如果有嵌入的双引号和逗号(即不在两端)不被替换,则使用(1)可以仅修剪逗号并在两端加上双引号。
library(gsubfn)
gsubfn('.', list('"' = '', ',' = '', '-' = '.'), v)
## [1] "SAMPLE_AAAGCAAAGATACACA.1_1" "SAMPLE_AAAGCAAAGATACACA.1_1"
3)read.table / chartr 这也仅使用基数R。使用read.table
分隔逗号中的字段并仅保留第二个字段来读入输入。这也将删除双引号。然后使用chartr
用点替换负号。
这假定唯一的双引号是字段周围的双引号,并且所有减号都将由点代替。嵌入式逗号将得到正确处理。
chartr("-", ".", read.table(text = v, sep = ",")[[2]])
## [1] "SAMPLE_AAAGCAAAGATACACA.1_1" "SAMPLE_AAAGCAAAGATACACA.1_1"