Stu
Stu

Reputation: 1643

Split a string by any number of spaces

I have the following string:

[1] "10012      ----      ----      ----      ----       CAB    UNCH                    CAB"

I want to split this string by the gaps, but the gaps have a variable number of spaces. Is there a way to use strsplit() function to split this string and return a vector of 8 elements that has removed all of the gaps?

One line of code is preferred.

Upvotes: 39

Views: 63024

Answers (3)

jaeyeon
jaeyeon

Reputation: 399

If you know the number of whitespaces in the input vector and the number of elements in the output vector, stringr::str_split_fixed() is another option.

I reproduced your example below.

test <- "10012      ----      ----      ----      ----       CAB    UNCH                    CAB"

stringr::str_split_fixed(test, " {2,}", 8) # at least two white spaces, eight elements 

This will be the output (the output is a matrix). If you want to turn this into a character vector, just pipe as.character().

     [,1]    [,2]   [,3]   [,4]   [,5]   [,6]  [,7]  
[1,] "10012" "----" "----" "----" "----" "CAB" "UNCH"
     [,8] 
[1,] "CAB"

Upvotes: 1

rnso
rnso

Reputation: 24535

strsplit function itself works, by simply using strsplit(ss, " +"):

ss = "10012      ----      ----      ----      ----       CAB    UNCH                    CAB"

strsplit(ss, " +")
[[1]]
[1] "10012" "----"  "----"  "----"  "----"  "CAB"   "UNCH"  "CAB"  

HTH

Upvotes: 19

A5C1D2H2I1M1N2O1R2T1
A5C1D2H2I1M1N2O1R2T1

Reputation: 193517

Just use strsplit with \\s+ to split on:

x <- "10012      ----      ----      ----      ----       CAB    UNCH       CAB"
x
# [1] "10012      ----      ----      ----      ----       CAB    UNCH       CAB"
strsplit(x, "\\s+")[[1]]
# [1] "10012" "----"  "----"  "----"  "----"  "CAB"   "UNCH"  "CAB"  
length(.Last.value)
# [1] 8

Or, in this case, scan also works:

scan(text = x, what = "")
# Read 8 items
# [1] "10012" "----"  "----"  "----"  "----"  "CAB"   "UNCH"  "CAB"  

Upvotes: 60

Related Questions