在R中插入空格

时间:2014-02-10 15:24:27

标签: r preprocessor data-cleansing

我想插入一个空格:例如x< - “cyclox 100500 tab”,y< - “glipicon mg 700600 tab”。我希望输出为“cyclox 100 500 tab”和“glipicon mg 700 600 tab”,即“100500”到“100 500”和“700600”到“700 600”之间的差距

现在我正在做的是找到6位数字的位置。因为我已经完成了

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

通过应用于x我得到f = 8并且对于y f = 13

用于转换我正在使用的数据

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

因为我想要8 + 2位置和13 + 2位置的空间,从而获得所需的输出

但是当我使用t&lt; -f + 2时,f在第一种情况下变为10并且正在执行:

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

什么都没发生。我需要将它应用于许多数据,因此我需要使用像t这样的变量。

任何人都可以告诉我该怎么做

由于

1 个答案:

答案 0 :(得分: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 )