2014-02-10 100 views
1

我想插入一個空格:例如x < - 「cyclox 100500標籤」,y < - 「glipicon mg 700600標籤」。我想輸出爲「cyclox 100 500標籤」和「glipicon mg 700 600標籤」,即「100500」到「100 500」和「700600」到「700 600」之間的差距在R中插入空格

現在我所做的是找到6位可用。對於我已經申請到西安做

f<-regexec("[0-9]{6}",x)[[1]][1] 

我得到F = 8和YF = 13

轉換用的數據我使用

x<-sub('(?<=.{10})', ' ', x, perl=TRUE) 
y<-sub('(?<=.{15})', ' ', y, perl=TRUE) 

,因爲我想在8空間2位和13 + 2位置,由此獲得所期望的輸出

但是,當我使用噸< -f + 2和,使f變爲10在第一種情況下,做:

x<-sub('(?<=.{t})', ' ', x, perl=TRUE) 

什麼都沒有發生。我需要將它應用於許多數據,所以我需要使用像t這樣的變量。

誰能告訴我如何做到這一點

感謝

回答

1

你可以試試這個:

sapply(strsplit(c(x, y), '(?<=0)(?=[1-9])', perl=TRUE), paste, collapse=' ') 
# [1] "cyclox 100 500 tab"  " glipicon mg 700 600 tab" 

這裏假設你的分裂永遠是0和非零數字之間。如果此假設不適用於您的較大數據集,則可以將模式更改爲(?<=\\d{3}),以在三位數後分割。

這就是說,你試圖用t來指定計數不起作用的原因是因爲你在字符串文字中使用t,並且你不能直接引用字符串中的變量。但是,您可以將變量替換爲字符串。看看sprintf函數。

x<-sub(sprintf("(?<=.{%d})", t), ' ', x, perl=TRUE)