为什么在使用转换表中添加数字

时间:2015-10-20 14:29:12

标签: r

我有下表(dat2),它是一个转换表:

> dat2 <- read.table(file.choose(), head=T, as.is=T)       #### Transformation table
> head (dat2)
                                    items newitem
1 EE945098C667EAE169914A85B2694508 SELECT     OV1
2 23552A46AA353DD331B6B6DD7A83DA8C SELECT     OV2
3 63B31CA67BB356B0965E19E7F66B3F11 SELECT     OV3
4 38A43F4165420E2F12EE500DC7E0E67C SELECT     OV4
5 ECEAFE485E65C9851907DEED13D4E9E7 SELECT     OV5
6 85190C0EFB3B7450568D84B3B3E3DB91 SELECT     OV6

我有输入表(dat1):

> head (dat1)
   sequence    support
1   <{OV1}> 0.14519496
2 <{OV195}> 0.09071318
3 <{OV196}> 0.09125194
4 <{OV197}> 0.09785171
5 <{OV198}> 0.09812109
6 <{OV304}> 0.09886188

我使用以下内容在表之间进行转换。我的意思是每个OV将被其等效的字符串替换:

> for (i in 1:nrow(dat2)) {
+   dat1$sequence <- gsub(dat2$newitem[i], dat2$items[i], dat1$sequence)
+ }

我从每个dat1序列得到一个额外的数字,从第二行SELECT95,SELECT96等可以看出,而它应该只是SELECT。为什么我明白了?我怎么能避免得到它?

> head (dat1)
                                       sequence    support
1   <{EE945098C667EAE169914A85B2694508 SELECT}> 0.14519496
2 <{EE945098C667EAE169914A85B2694508 SELECT95}> 0.09071318
3 <{EE945098C667EAE169914A85B2694508 SELECT96}> 0.09125194
4 <{EE945098C667EAE169914A85B2694508 SELECT97}> 0.09785171
5 <{EE945098C667EAE169914A85B2694508 SELECT98}> 0.09812109
6 <{63B31CA67BB356B0965E19E7F66B3F11 SELECT04}> 0.09886188

1 个答案:

答案 0 :(得分:1)

"\\d*"添加到您的模式中。它将捕获额外的数字并消除它们以进行替换。

sub(paste0(newitem, "\\d*"), items, sequence)
#[1] "<{EE945098C667EAE169914A85B2694508 SELECT}>"

数据

items <- "EE945098C667EAE169914A85B2694508 SELECT"
newitem <- "OV1"
sequence <- "<{OV195}>"