當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。