1

我想插入一个空格:例如 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]  

通过申请 xi 得到 f=8 和 yf=13

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

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

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

但是当我使用 t<-f+2 时 f 在第一种情况下变为 10 并执行以下操作:

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

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

谁能告诉我该怎么做

谢谢

4

1 回答 1

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 )
于 2014-02-10T15:32:01.007 回答