假设我在 R 中有一个特定的字符串,比如“ABCDEFG”。我可以使用以下正则表达式将其分成每两个字符的序列。
strsplit("ABCDEFG", "(?<=(..))", perl = TRUE)
[[1]]
[1] "AB" "CD" "EF" "G"
但我想把它分成一个特定的序列。前两个字符,然后是下一个字符,然后是两个字符,然后是一个字符,依此类推。
如果我的输入字符串是“ABCDEFG”,我想要“AB”“C”“DE”“F”“G”作为输出(在最后一个元素中只剩下一个元素)。
我该怎么办呢。我不想提前数
nchar
,因为我想动态地进行计算。
您可以使用矢量化
substr
函数:
vsubstr <- Vectorize(substr)
x <- "ABCDEFG"
pat <- rep(c(1,2), length.out=1 + ceiling(nchar(x)/2))
start <- cumsum(pat)
stop <- start + rep(c(1,0), length.out=1 + ceiling(nchar(x)/2))
vsubstr(x, start, stop)
ABCDEFG <NA> <NA> <NA> <NA>
"AB" "C" "DE" "F" "G"
x <- "ABCDEFGH"
vsubstr(x, start, stop)
ABCDEFGH <NA> <NA> <NA> <NA>
"AB" "C" "DE" "F" "GH"
我承认不太优雅。