从字符串中提取子字符串,以及字符串的其余部分
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)
不过调用substr
和substring
好像有点浪费。有没有办法同时提取子字符串和字符串的其余部分(子字符串和原始字符串之间的 "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")
我想将字符串的第一个字符存储在一个变量中,将字符串的其余部分存储在另一个变量中。例如:
x <- "foo"
prefix <- substr(x, 1, 1)
suffix <- substring(x, 2)
不过调用substr
和substring
好像有点浪费。有没有办法同时提取子字符串和字符串的其余部分(子字符串和原始字符串之间的 "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")