Reputation: 7063
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
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
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