I'm trying to convert a list of vectors (a multidimensional array essentially) into a data frame, but every time I try I'm getting unexpected results.
My aim is to instantiate a blank list, populate it in a for loop with vectors containing information about that iteration of the loop, then convert it into a data frame after it's finished.
> vectorList <- list() > for(i in 1:5){ + vectorList[[i]] <- c("number" = i, "square root" = sqrt(i)) + } > vectorList
Outputs:
> [[1]] > number square root > 1 1 > > [[2]] > number square root > 2.000000 1.414214 > > [[3]] > number square root > 3.000000 1.732051 > > [[4]] > number square root > 4 2 > > [[5]] > number square root > 5.000000 2.236068
Now I want this to become a data frame with 5 observations of 2 variables, but trying to create a data frame from 'vectorList'
numbers <- data.frame(vectorList)
results in 2 observations of 5 variables.
Weirdly it won't even be coerced with reshape2 (which I know would be an awful work around, but I tried).
Anyone got any insight?
For example, if we have a vector x then it can be converted to data frame by using as. data. frame(x) and this can be done for a matrix as well.
First, create a large list. Then use the Map function on the list and convert it to dataframe using the as. data. frame function in R.
You can use:
as.data.frame(do.call(rbind, vectorList))
Or:
library(data.table) rbindlist(lapply(vectorList, as.data.frame.list))
Or:
library(dplyr) bind_rows(lapply(vectorList, as.data.frame.list))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With