Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Split a character vector into individual characters? (opposite of paste or stringr::str_c)

An incredibly basic question in R yet the solution isn't clear.

How to split a vector of character into its individual characters, i.e. the opposite of paste(..., sep='') or stringr::str_c() ?

Anything less clunky than this:

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"

Can it be done otherwise, e.g. with strsplit(), stringr::* or anything else?

like image 742
smci Avatar asked Apr 12 '14 10:04

smci


2 Answers

Yes, strsplit will do it. strsplit returns a list, so you can either use unlist to coerce the string to a single character vector, or use the list index [[1]] to access first element.

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"

OR (noting that it is not actually necessary to name the split argument)

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"

You can also split on NULL or character(0) for the same result.

like image 132
Rich Scriven Avatar answered Oct 02 '22 13:10

Rich Scriven


str_extract_all() from stringr offers a nice way to perform this operation:

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"
like image 42
tmfmnk Avatar answered Oct 02 '22 15:10

tmfmnk