hope288
hope288

Reputation: 1445

Weird conversion from list to dataframe in R

I have a list that I created from a for loop and it looks like this: enter image description here

I tried to convert it to a dataframe using the code:

dflist<- as.data.frame(mylist)

But my dataframe looks like this now: enter image description here

I know I probably created my list wrong but I am thinking this is still salvageable if I just need to convert the numbers to a dataframe correctly.

My end goal is to plot the numbers against their index (1-30) and I thought creating a dataframe first to clean it up and then plot would be helpful. Any help would be really appreciated. Thank you.

Upvotes: 3

Views: 1025

Answers (1)

akrun
akrun

Reputation: 887881

The data showed is a list. We can use unlist and create a data.frame. Based on the image showed in OP's post, each list element have a length of 1. By doing unlist, we convert the list to vector and then wrap with data.frame.

data.frame(ind= seq_along(lst), Col1= as.numeric(unlist(lst)))

Or another option would be stack after naming the list elements

df1 <- transform(stack(setNames(lst, seq_along(lst))),
                 values = as.numeric(values))

It gives a two column dataset. From this we can do the plotting


Regarding the OP's approach about calling as.data.frame directly on the list, it does work in a different way as it calls on as.data.frame.list. For example, if we do as.data.frame on a vector, it uses as.data.frame.vector

as.data.frame(1:5)
# 1:5
#1   1
#2   2
#3   3
#4   4
#5   5

But, if we call as.data.frame.list

as.data.frame.list(1:5)
#  X1L X2L X3L X4L X5L
#1   1   2   3   4   5

we get a data.frame with 'n' columns (based on the length of the vector).

Suppose, we do the same on a list

as.data.frame(as.list(1:5))
#  X1L X2L X3L X4L X5L
#1   1   2   3   4   5

It uses the as.data.frame.list. To get the complete list of methods of as.data.frame,

methods('as.data.frame')
#[1] as.data.frame.aovproj*        as.data.frame.array          
# [3] as.data.frame.AsIs            as.data.frame.character      
# [5] as.data.frame.chron*          as.data.frame.complex        
# [7] as.data.frame.data.frame      as.data.frame.data.table*    
# [9] as.data.frame.Date            as.data.frame.dates*         
#[11] as.data.frame.default         as.data.frame.difftime       
#[13] as.data.frame.factor          as.data.frame.ftable*        
#[15] as.data.frame.function*       as.data.frame.grouped_df*    
#[17] as.data.frame.idf*            as.data.frame.integer        
#[19] as.data.frame.ITime*          as.data.frame.list      <-------     
#[21] as.data.frame.logical         as.data.frame.logLik*        
#[23] as.data.frame.matrix          as.data.frame.model.matrix   
#[25] as.data.frame.noquote         as.data.frame.numeric        
#[27] as.data.frame.numeric_version as.data.frame.ordered        
#[29] as.data.frame.POSIXct         as.data.frame.POSIXlt        
#[31] as.data.frame.raw             as.data.frame.rowwise_df*    
#[33] as.data.frame.table           as.data.frame.tbl_cube*      
#[35] as.data.frame.tbl_df*         as.data.frame.tbl_dt*        
#[37] as.data.frame.tbl_sql*        as.data.frame.times*         
#[39] as.data.frame.ts              as.data.frame.vector  

Upvotes: 5

Related Questions