将字符向量拆分为单个字符?(与paste或stringr :: str_c相反)

smc*_*mci 7 string r paste string-split stringr

R中一个令人难以置信的基本问题但解决方案尚不清楚.

如何将一个字符向量分成单独的字符,即与paste(..., sep='')或相反stringr::str_c()

比这更笨重的东西:

sapply(1:26, function(i) { substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",i,i) } )
"A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
Run Code Online (Sandbox Code Playgroud)

是否可以以其他方式完成,例如strsplit(),stringr::*或其他任何事情?

Ric*_*ven 13

是的,strsplit会这样做的. strsplit返回一个列表,因此您可以使用unlist将字符串强制转换为单个字符向量,或使用列表索引[[1]]访问第一个元素.

x <- paste(LETTERS, collapse = "")

unlist(strsplit(x, split = ""))
# [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
#[20] "T" "U" "V" "W" "X" "Y" "Z"
Run Code Online (Sandbox Code Playgroud)

或(注意实际上没有必要命名split参数)

strsplit(x, "")[[1]]
# [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
#[20] "T" "U" "V" "W" "X" "Y" "Z"
Run Code Online (Sandbox Code Playgroud)

您也可以拆分NULLcharacter(0)获得相同的结果.


tmf*_*mnk 6

str_extract_all()fromstringr提供了一种执行此操作的好方法:

str_extract_all("ABCDEFGHIJKLMNOPQRSTUVWXYZ", boundary("character"))

[[1]]
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U"
[22] "V" "W" "X" "Y" "Z"
Run Code Online (Sandbox Code Playgroud)