strsplit
位於 base
包(package)。 說明
根據其中子字符串 split
的匹配,將字符向量 x
的元素拆分為子字符串。
用法
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
參數
x |
字符向量,其中的每個元素都要被分割。其他輸入(包括因子)將給出錯誤。 |
split |
包含用於分割的 regular expression (除非 |
fixed |
合乎邏輯的。如果 |
perl |
合乎邏輯的。應該使用 Perl 兼容的正則表達式嗎? |
useBytes |
合乎邏輯的。如果 |
細節
參數 split
將被強製轉換為字符,因此您將看到與 split = NULL
一起使用來表示 split = character(0)
,包括在下麵的示例中。
請注意,可以通過 split = character(0)
或 split = ""
來拆分為單個字符;兩者是等價的。這裏 ‘character’ 的定義取決於語言環境:在單字節語言環境中,它是一個字節,在多字節語言環境中,它是由“寬字符”表示的單位(幾乎總是 Unicode 代碼點)。
split
的缺失值根本不會拆分 x
的相應元素。
應用於每個輸入字符串的算法是
repeat { if the string is empty break. if there is a match add the string to the left of the match to the output. remove the match and all to the left of it. else add the string to the output. break. }
請注意,這意味著如果在(非空)字符串的開頭存在匹配項,則輸出的第一個元素是 ""
,但如果在字符串的末尾存在匹配項,則輸出是與刪除匹配項相同。
另請注意,如果非空字符串開頭存在空匹配,則返回第一個字符,並且算法繼續處理字符串的其餘部分。在設計正則表達式時需要牢記這一點。例如,當查找後跟字母的單詞邊界( "[[:<:]]"
和 perl = TRUE
)時,可以禁止在字符串開頭進行匹配(通過 "(?!^)[[:<:]]"
)。
當前語言環境中的無效輸入將被警告最多 5 次。
值
與 x
長度相同的列表,其中第 i
元素包含 x[i]
的分割向量。
如果 x
或 split
的任何元素被聲明為 UTF-8 格式(請參閱 Encoding
),則結果中的所有非 ASCII 字符串都將采用 UTF-8 格式,並將其編碼聲明為 UTF-8 。 (如果任何元素被聲明為 Latin-1,除了在 Latin-1 語言環境中之外,這也成立。)對於 perl = TRUE, useBytes = FALSE
,多字節語言環境中的所有非 ASCII 字符串都將轉換為 UTF-8。
如果 x
或 split
的任何元素被標記為 "bytes"
(參見 Encoding
),則結果中拆分創建的所有非 ASCII 字符串將被標記為 "bytes"
,但結果的編碼未分割的字符串未指定(可能是"bytes"
或原始字符串)。如果 x
或 split
中沒有元素被標記為 "bytes"
,而是標記為 useBytes = TRUE
,則即使通過拆分創建的結果字符串的編碼也是未指定的(可能是 "bytes"
或 "unknown"
,可能在當前編碼)。不鼓勵混合使用 "bytes"
和其他標記編碼,但如果仍然需要,可以使用 iconv
重新編碼結果,例如轉換為 UTF-8,並適當替換無效字節。
例子
noquote(strsplit("A text I want to display with spaces", NULL)[[1]])
x <- c(as = "asfef", qu = "qwerty", "yuiop[", "b", "stuff.blah.yech")
# split x on the letter e
strsplit(x, "e")
unlist(strsplit("a.b.c", "."))
## [1] "" "" "" "" ""
## Note that 'split' is a regexp!
## If you really want to split on '.', use
unlist(strsplit("a.b.c", "[.]"))
## [1] "a" "b" "c"
## or
unlist(strsplit("a.b.c", ".", fixed = TRUE))
## a useful function: rev() for strings
strReverse <- function(x)
sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
strReverse(c("abc", "Statistics"))
## get the first names of the members of R-core
a <- readLines(file.path(R.home("doc"),"AUTHORS"))[-(1:8)]
a <- a[(0:2)-length(a)]
(a <- sub(" .*","", a))
# and reverse them
strReverse(a)
## Note that final empty strings are not produced:
strsplit(paste(c("", "a", ""), collapse="#"), split="#")[[1]]
# [1] "" "a"
## and also an empty string is only produced before a definite match:
strsplit("", " ")[[1]] # character(0)
strsplit(" ", " ")[[1]] # [1] ""
也可以看看
paste
用於相反,grep
和 sub
用於字符串搜索和操作;還有nchar
、substr
。
‘regular expression’了解模式規範的詳細信息。
選項 PCRE_use_JIT
控製 perl = TRUE
時的詳細信息。
相關用法
- R strtoi 將字符串轉換為整數
- R strrep 重複字符向量的元素
- R strwrap 將字符串換行以設置段落格式
- R strptime 與字符之間的日期時間轉換函數
- R strtrim 將字符串修剪為指定的顯示寬度
- R structure 屬性規範
- R stop 停止函數執行
- R standardGeneric 形式化方法係統 – 調度 S4 方法
- R startsWith 字符串是否以另一個字符串開頭或結尾?
- R stopifnot 確保 R 表達式的真實性
- R seq.Date 生成規則的日期序列
- R search 給出 R 對象的搜索路徑
- R solve 求解方程組
- R scan 讀取數據值
- R sprintf 使用 C 風格字符串格式化命令
- R sign 標誌函數
- R svd 矩陣的奇異值分解
- R source 從文件、連接或表達式中讀取 R 代碼
- R sQuote 引用文字
- R switch 選擇替代方案列表之一
- R substitute 替換和引用表達式
- R split 分組並重新集合
- R slice.index 數組中的切片索引
- R sort 對向量進行排序或排序
- R sequence 創建序列向量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Split the Elements of a Character Vector。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。