我有数百个变量名称,如下所示:
IndexError: index 0 is out of bounds for axis 0 with size 0
但我需要它们看起来像这样:
c("B02001001","B02001002","B23020003","B19057001")
我假设有一种简单的方法可以做到这一点......也许是字符串?任何想法将不胜感激。谢谢!
答案 0 :(得分:4)
我们可以将sub
与捕获组一起使用。我们将第一个组捕获为6个字符((.{6})
),后跟字符,直到字符串结尾为第二个字符。在替换中,我们可以在第一个(_
)和第二个(\\1
)捕获组之间使用\\2
。
sub('(.{6})(.*)$', '\\1_\\2', v1)
#[1] "B02001_001" "B02001_002" "B23020_003" "B19057_001"
v1 <- c("B02001001","B02001002","B23020003","B19057001")
答案 1 :(得分:3)
看起来你可以做到
x <- c("B02001001","B02001002","B23020003","B19057001")
paste(substr(x, 1L, 6L), substr(x, 7L, 1e5L), sep = "_")
# [1] "B02001_001" "B02001_002" "B23020_003" "B19057_001"
1e5L
仅作为安全预防措施,以防某些字符串超过9个字符。如果您知道他们都是9,那么只需用9L
替换它。你也可以使用substring()
作为第二个电话而不用担心。
paste(substr(x, 1L, 6L), substring(x, 7L), sep = "_")
# [1] "B02001_001" "B02001_002" "B23020_003" "B19057_001"