删除“”,然后将“-”替换为“。”

时间:2020-07-28 08:35:17

标签: r regex

我正在处理单个单元格数据。

我正在尝试将提取的细胞条形码与其他数据进行匹配,但是条形码的结构不同。

我提取的条形码:,"SAMPLE_AAAGCAAAGATACACA-1_1"(很奇怪,它以逗号开头保存了)

我想要的条形码:SAMPLE_AAAGCAAAGATACACA.1_1

当我尝试删除<,“>替换这些时,需要使用哪些功能?

2 个答案:

答案 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"