Will this do it for you:

> x <- readLines(textConnection("A,B,C
+ B,B
+ A,AA,C
+ A,B,BB,BBB,B,B"))
> closeAllConnections()
> x.s <- strsplit(x, ',')
> # determine max length
> x.max <- max(sapply(x.s, length))
> # create character matrix
> x.mat <- matrix(
+     sapply(x.s, function(a) c(a, rep(NA, x.max - length(a))))
+     , byrow = TRUE
+     , ncol = x.max
+     )
>
>
> x.mat
     [,1] [,2] [,3] [,4]  [,5] [,6]
[1,] "A"  "B"  "C"  NA    NA   NA
[2,] "B"  "B"  NA   NA    NA   NA
[3,] "A"  "AA" "C"  NA    NA   NA
[4,] "A"  "B"  "BB" "BBB" "B"  "B"
>


On Mon, Oct 3, 2011 at 11:40 AM, Benjamin Wright <bj...@well.ox.ac.uk> wrote:
>
> I'm struggling to find a way of parsing a vector of data in this sort of form:
>
> A,B,C
> B,B
> A,AA,C
> A,B,BB,BBB,B,B
>
> into a matrix (or data frame). The catch is that I don't know a priori how 
> many entries there will be in each element, nor how many characters there 
> will be. strsplit(vec,",") gets me a list, but I can't find a way of turning 
> the list into a matrix. unlistlst) destroys the length data and 
> do.call("rbind", lst) fails because of the uneven lengths. It is possible to 
> go through the vector element by element, but that has proved too slow for my 
> purposes.
>
> Is there a reasonably quick method of achieving this in a vector-oriented way?
>
> Cheers,
>
> Ben
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to