Christoph
Christoph

Reputation: 7063

How can I transform a matrix of characters with a few lines of code to a different matrix?

I have the following matric (I do not stick to a matrix type - it could also be a data.frame, ...):

df <- structure(c("Jan-01", "Dec-31", "00-00", "24-00", "Jan-01", "Jun-30", 
"12-00", "18-00", "Jul-06", "Dec-31", "09-00", "19-00", "Jul-06", 
"Dec-31", "09-00", "19-00"), .Dim = c(4L, 4L), .Dimnames = list(
    NULL, c("V1", "V2", "V3", "V4")))

#      V1       V2       V3       V4      
# [1,] "Jan-01" "Jan-01" "Jul-06" "Jul-06"
# [2,] "Dec-31" "Jun-30" "Dec-31" "Dec-31"
# [3,] "00-00"  "12-00"  "09-00"  "09-00" 
# [4,] "24-00"  "18-00"  "19-00"  "19-00" 

How can I make it look like

       V1   V2    V3    V4
[1,] "Jan" "Jan" "Jul" "Jul"
[2,]  "01"  "01"  "06"  "06"
[3,] "Dec" "Jun" "Dec" "Dec"
[4,]  "31"  "30"  "31"  "31"
[5,]  "00"  "12"  "09"  "09"
[6,]  "00"  "00"  "00"  "00"
[7,]  "24"  "18"  "19"  "19"
[8,]  "00"  "00"  "00"  "00"

that means: split each cell by "-" and transform it to vector with 2 rows.
I tried with the methods from here but the results were far away from good, e.g. t(str_split_fixed(new_standard, "\\-", 8))

Upvotes: 1

Views: 29

Answers (2)

akrun
akrun

Reputation: 886948

We can use scan from base R

matrix(scan(text=df, sep="-", what ="", quiet=TRUE), ncol=4)
#      [,1]  [,2]  [,3]  [,4] 
#[1,] "Jan" "Jan" "Jul" "Jul"
#[2,] "01"  "01"  "06"  "06" 
#[3,] "Dec" "Jun" "Dec" "Dec"
#[4,] "31"  "30"  "31"  "31" 
#[5,] "00"  "12"  "09"  "09" 
#[6,] "00"  "00"  "00"  "00" 
#[7,] "24"  "18"  "19"  "19" 
#[8,] "00"  "00"  "00"  "00" 

Upvotes: 2

dayne
dayne

Reputation: 7774

Here is one solution:

library(stringr)
matrix(t(str_split_fixed(df, "-", 2)), ncol = 4)
#      [,1]  [,2]  [,3]  [,4] 
# [1,] "Jan" "Jan" "Jul" "Jul"
# [2,] "01"  "01"  "06"  "06" 
# [3,] "Dec" "Jun" "Dec" "Dec"
# [4,] "31"  "30"  "31"  "31" 
# [5,] "00"  "12"  "09"  "09" 
# [6,] "00"  "00"  "00"  "00" 
# [7,] "24"  "18"  "19"  "19" 
# [8,] "00"  "00"  "00"  "00"

Upvotes: 1

Related Questions