从字符串中提取子字符串,以及字符串的其余部分

Extract a substring from a string, as well as the remainder of the string

我想将字符串的第一个字符存储在一个变量中,将字符串的其余部分存储在另一个变量中。例如:

x <- "foo"
prefix <- substr(x, 1, 1)
suffix <- substring(x, 2)

不过调用substrsubstring好像有点浪费。有没有办法同时提取子字符串和字符串的其余部分(子字符串和原始字符串之间的 "difference")?

这是一个使用正则表达式的想法,

strsplit(gsub('^([A-z]{1})([A-z]+)$', '\1_\2', x), '_')
#[[1]]
#[1] "f"  "oo"

可能是这样的:

substring(x, c(1, 2), c(1, nchar(x)))
# [1] "f"  "oo"

您还可以使用 stringr 包中的 str_split

require(stringr)
x<-c("foo", "hello", "world")
str_split(x,"(?<=.{1})",2)
#[[1]]
#[1] "f"  "oo"
#[[2]]
#[1] "h"    "ello"
#[[3]]
#[1] "w"    "orld"

我们还可以使用 separate 来自 tidyr

library(tidyr)
separate(data_frame(x), x, into = c('prefix', 'suffix'), sep=1)
# A tibble: 3 × 2
#  prefix suffix 
#* <chr> <chr>
#1     f    oo
#2     h  ello
#3     w  orld

数据

x<-c("foo", "hello", "world")