我想插入一个空格:例如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这样的变量。
任何人都可以告诉我该怎么做
由于
答案 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 )