当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R stringr str_sub 使用子字符串的位置获取和设置子字符串


str_sub() 提取或替换每个字符串中单个位置的元素。 str_sub_all() 允许您在每个字符串的多个元素处提取字符串。

用法

str_sub(string, start = 1L, end = -1L)

str_sub(string, start = 1L, end = -1L, omit_na = FALSE) <- value

str_sub_all(string, start = 1L, end = -1L)

参数

string

输入向量。或者是一个字符向量,或者是可强制转换为一个的东西。

start, end

一对整数向量,定义要提取的字符范围(包括)。

或者,您可以将矩阵传递给 start ,而不是一对向量。该矩阵应有两列,标记为 startend ,或 startlength

omit_na

单一逻辑值。如果 TRUE ,提供的任何参数中缺少值将导致输入未更改。

value

替换字符串

  • str_sub() :与 string /start /end 长度相同的字符向量。

  • str_sub_all() :与 string 长度相同的列表。每个元素都是一个长度与 start /end 相同的字符向量。

也可以看看

stringi::stri_sub()中的底层实现

例子

hw <- "Hadley Wickham"

str_sub(hw, 1, 6)
#> [1] "Hadley"
str_sub(hw, end = 6)
#> [1] "Hadley"
str_sub(hw, 8, 14)
#> [1] "Wickham"
str_sub(hw, 8)
#> [1] "Wickham"

# Negative indices index from end of string
str_sub(hw, -1)
#> [1] "m"
str_sub(hw, -7)
#> [1] "Wickham"
str_sub(hw, end = -7)
#> [1] "Hadley W"

# str_sub() is vectorised by both string and position
str_sub(hw, c(1, 8), c(6, 14))
#> [1] "Hadley"  "Wickham"

# if you want to extract multiple positions from multiple strings,
# use str_sub_all()
x <- c("abcde", "ghifgh")
str_sub(x, c(1, 2), c(2, 4))
#> [1] "ab"  "hif"
str_sub_all(x, start = c(1, 2), end = c(2, 4))
#> [[1]]
#> [1] "ab"  "bcd"
#> 
#> [[2]]
#> [1] "gh"  "hif"
#> 

# Alternatively, you can pass in a two column matrix, as in the
# output from str_locate_all
pos <- str_locate_all(hw, "[aeio]")[[1]]
pos
#>      start end
#> [1,]     2   2
#> [2,]     5   5
#> [3,]     9   9
#> [4,]    13  13
str_sub(hw, pos)
#> [1] "a" "e" "i" "a"

# You can also use `str_sub()` to modify strings:
x <- "BBCDEF"
str_sub(x, 1, 1) <- "A"; x
#> [1] "ABCDEF"
str_sub(x, -1, -1) <- "K"; x
#> [1] "ABCDEK"
str_sub(x, -2, -2) <- "GHIJ"; x
#> [1] "ABCDGHIJK"
str_sub(x, 2, -2) <- ""; x
#> [1] "AK"
源代码:R/sub.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Get and set substrings using their positions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。