Convert "ragged" list to matrix

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Convert "ragged" list to matrix

Kenneth Takagi
Hi,

 

I have a list made up of character strings with each item a different
length (each item is between 1and 6 strings long).  Is there a way to
convert a "ragged" list to a matrix such that each item is its own row?
Here is a simple example:

 

a=list();

a[[1]] = c("a", "b", "c");

a[[2]] = c("d", "e");

a[[3]] = c("f", "g", "h", "i");

 

I would like to convert the list to a matrix (or data frame) in this
form, with the "missing" entries "NA" or something similar:

 

     [,1] [,2] [,3] [,4]

[1,] "a"  "b"  "c"  "NA"

[2,] "d"  "e"  "NA"  "NA"

[3,] "f"  "g"  "h"  "i"

 

 

Any suggestions?

 

Thanks!

 

 

Ken

[hidden email]

 


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: Convert "ragged" list to matrix

jholtman
try this:

> a
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "d" "e"
[[3]]
[1] "f" "g" "h" "i"
> # find max row length
> rowMax <- max(sapply(a, length))
> # now create output matrix by lengthening rows
> do.call(rbind, lapply(a, function(x){
+     length(x) <- rowMax
+     x
+ }))
     [,1] [,2] [,3] [,4]
[1,] "a"  "b"  "c"  NA
[2,] "d"  "e"  NA   NA
[3,] "f"  "g"  "h"  "i"
>


On Mon, Jun 22, 2009 at 7:15 PM, Kenneth Takagi <[hidden email]> wrote:

> Hi,
>
>
>
> I have a list made up of character strings with each item a different
> length (each item is between 1and 6 strings long).  Is there a way to
> convert a "ragged" list to a matrix such that each item is its own row?
> Here is a simple example:
>
>
>
> a=list();
>
> a[[1]] = c("a", "b", "c");
>
> a[[2]] = c("d", "e");
>
> a[[3]] = c("f", "g", "h", "i");
>
>
>
> I would like to convert the list to a matrix (or data frame) in this
> form, with the "missing" entries "NA" or something similar:
>
>
>
>     [,1] [,2] [,3] [,4]
>
> [1,] "a"  "b"  "c"  "NA"
>
> [2,] "d"  "e"  "NA"  "NA"
>
> [3,] "f"  "g"  "h"  "i"
>
>
>
>
>
> Any suggestions?
>
>
>
> Thanks!
>
>
>
>
>
> Ken
>
> [hidden email]
>
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>



--
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: Convert "ragged" list to matrix

Henrique Dallazuanna
In reply to this post by Kenneth Takagi
Try this:

matrix(unlist(lapply(a, '[', 1:max(sapply(a, length)))), ncol = 4, byrow =
TRUE)

or

 do.call(rbind, lapply(a, '[', 1:max(sapply(a, length))))


On Mon, Jun 22, 2009 at 8:15 PM, Kenneth Takagi <[hidden email]> wrote:

> Hi,
>
>
>
> I have a list made up of character strings with each item a different
> length (each item is between 1and 6 strings long).  Is there a way to
> convert a "ragged" list to a matrix such that each item is its own row?
> Here is a simple example:
>
>
>
> a=list();
>
> a[[1]] = c("a", "b", "c");
>
> a[[2]] = c("d", "e");
>
> a[[3]] = c("f", "g", "h", "i");
>
>
>
> I would like to convert the list to a matrix (or data frame) in this
> form, with the "missing" entries "NA" or something similar:
>
>
>
>     [,1] [,2] [,3] [,4]
>
> [1,] "a"  "b"  "c"  "NA"
>
> [2,] "d"  "e"  "NA"  "NA"
>
> [3,] "f"  "g"  "h"  "i"
>
>
>
>
>
> Any suggestions?
>
>
>
> Thanks!
>
>
>
>
>
> Ken
>
> [hidden email]
>
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>


--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

        [[alternative HTML version deleted]]


______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: Convert "ragged" list to matrix

Kenneth Takagi
In reply to this post by jholtman
Thanks for all the feedback; I found a previous post covering this
question:

 

https://stat.ethz.ch/pipermail/r-help/2009-February/189232.html

 

Problem solved!

 

 

Kenneth Takagi

[hidden email]

 

________________________________

From: jim holtman [mailto:[hidden email]]
Sent: Monday, June 22, 2009 7:24 PM
To: Kenneth Takagi
Cc: [hidden email]
Subject: Re: [R] Convert "ragged" list to matrix



try this:



> a
[[1]]
[1] "a" "b" "c"

[[2]]
[1] "d" "e"

[[3]]
[1] "f" "g" "h" "i"

> # find max row length
> rowMax <- max(sapply(a, length))
> # now create output matrix by lengthening rows
> do.call(rbind, lapply(a, function(x){
+     length(x) <- rowMax
+     x
+ }))
     [,1] [,2] [,3] [,4]
[1,] "a"  "b"  "c"  NA  
[2,] "d"  "e"  NA   NA  
[3,] "f"  "g"  "h"  "i"
>



On Mon, Jun 22, 2009 at 7:15 PM, Kenneth Takagi <[hidden email]> wrote:

Hi,



I have a list made up of character strings with each item a different
length (each item is between 1and 6 strings long).  Is there a way to
convert a "ragged" list to a matrix such that each item is its own row?
Here is a simple example:



a=list();

a[[1]] = c("a", "b", "c");

a[[2]] = c("d", "e");

a[[3]] = c("f", "g", "h", "i");



I would like to convert the list to a matrix (or data frame) in this
form, with the "missing" entries "NA" or something similar:



    [,1] [,2] [,3] [,4]

[1,] "a"  "b"  "c"  "NA"

[2,] "d"  "e"  "NA"  "NA"

[3,] "f"  "g"  "h"  "i"





Any suggestions?



Thanks!





Ken

[hidden email]




       [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: Convert "ragged" list to matrix

Gabor Grothendieck
In reply to this post by Kenneth Takagi
Try this:

> unname(t(do.call(cbind, lapply(a, ts))))
     [,1] [,2] [,3] [,4]
[1,] "a"  "b"  "c"  NA
[2,] "d"  "e"  NA   NA
[3,] "f"  "g"  "h"  "i"


On Mon, Jun 22, 2009 at 7:15 PM, Kenneth Takagi<[hidden email]> wrote:

> Hi,
>
>
>
> I have a list made up of character strings with each item a different
> length (each item is between 1and 6 strings long).  Is there a way to
> convert a "ragged" list to a matrix such that each item is its own row?
> Here is a simple example:
>
>
>
> a=list();
>
> a[[1]] = c("a", "b", "c");
>
> a[[2]] = c("d", "e");
>
> a[[3]] = c("f", "g", "h", "i");
>
>
>
> I would like to convert the list to a matrix (or data frame) in this
> form, with the "missing" entries "NA" or something similar:
>
>
>
>     [,1] [,2] [,3] [,4]
>
> [1,] "a"  "b"  "c"  "NA"
>
> [2,] "d"  "e"  "NA"  "NA"
>
> [3,] "f"  "g"  "h"  "i"
>
>
>
>
>
> Any suggestions?
>
>
>
> Thanks!
>
>
>
>
>
> Ken
>
> [hidden email]
>
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

problem reading in a csv file

Chris Howden
In reply to this post by Kenneth Takagi
Morning all,

I'm trying to read in a csv file and R is having some problems. For some
reason its not 'seeing' all the columns for each row, and as such is not
reading in the file.

I've opened the file in EXCEL and I can't see any problems with it. All rows
have the correct number of columns.

The code and error messages I've used are below. I've also run
'count'fields" and have included that output too.

Any help or suggestions would be much appreciated.

Thanks


<-read.table("RWM Shopper Tracker - RAW DATA - 22JUN09 - Copy.csv",
header=TRUE, sep =",", row.names=NULL)

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
:
  line 13 did not have 2264 elements


> count.fields("RWM Shopper Tracker - RAW DATA - 22JUN09 - Copy.csv",
sep=",")
    [1] 2264 2264 2264 2264 2264 2264 2264 2264 2264 2264  384 2264 2264
384 2264 2264 2264 2264 2264 2264 2264 2264
   [23] 2264 2264 2264 2264  152 2264  384 2264 2264 2264 2264 2264 2264
2264 2264 2264 2264 2264 2264 2264 2264 2264
 

Chris Howden
Marketing Scientist
For all your Analysis, Modelling, Experimental Design and Training needs
(mobile) 0410 689 945
(fax / office) (+618) 8952 7878
[hidden email]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: problem reading in a csv file

jholtman
In reply to this post by Kenneth Takagi
Check for unbalanced quotes or comments.  try:
count.fields("RWM Shopper Tracker - RAW DATA - 22JUN09 - Copy.csv",
quote='', comment.char='',
sep=",")

On Mon, Jun 22, 2009 at 9:38 PM, Chris Howden <[hidden email]>wrote:

> Morning all,
>
> I'm trying to read in a csv file and R is having some problems. For some
> reason its not 'seeing' all the columns for each row, and as such is not
> reading in the file.
>
> I've opened the file in EXCEL and I can't see any problems with it. All
> rows
> have the correct number of columns.
>
> The code and error messages I've used are below. I've also run
> 'count'fields" and have included that output too.
>
> Any help or suggestions would be much appreciated.
>
> Thanks
>
>
> <-read.table("RWM Shopper Tracker - RAW DATA - 22JUN09 - Copy.csv",
> header=TRUE, sep =",", row.names=NULL)
>
> Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
> :
>  line 13 did not have 2264 elements
>
>
> > count.fields("RWM Shopper Tracker - RAW DATA - 22JUN09 - Copy.csv",
> sep=",")
>    [1] 2264 2264 2264 2264 2264 2264 2264 2264 2264 2264  384 2264 2264
> 384 2264 2264 2264 2264 2264 2264 2264 2264
>   [23] 2264 2264 2264 2264  152 2264  384 2264 2264 2264 2264 2264 2264
> 2264 2264 2264 2264 2264 2264 2264 2264 2264
>
>
> Chris Howden
> Marketing Scientist
> For all your Analysis, Modelling, Experimental Design and Training needs
> (mobile) 0410 689 945
> (fax / office) (+618) 8952 7878
> [hidden email]
>
> ______________________________________________
> [hidden email] 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
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.