I know this is a really noob question, but how do I append a list of dataframes to a dataframe to form a new list, with all the data.frames at the same level in the list?
Some of my attempts:
> df <- data.frame(time=1:5)
> df
time
1 1
2 2
3 3
4 4
5 5
> innerlist <- list(df,df,df)
> innerlist
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]]
time
1 1
2 2
3 3
4 4
5 5
[[3]]
time
1 1
2 2
3 3
4 4
5 5
> outerlist <- list(df,innerlist)
> outerlist
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]]
[[2]][[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]][[2]]
time
1 1
2 2
3 3
4 4
5 5
[[2]][[3]]
time
1 1
2 2
3 3
4 4
5 5
> outerlist2 <- c(df,innerlist)
> outerlist2
$time
[1] 1 2 3 4 5
[[2]]
time
1 1
2 2
3 3
4 4
5 5
[[3]]
time
1 1
2 2
3 3
4 4
5 5
[[4]]
time
1 1
2 2
3 3
4 4
5 5
> outerlist3 <- cbind(df,innerlist)
> outerlist3
time time time time
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
Pretend that all the df
s are different data-frames.
I want to append df to innnerlist, and get a list with 4 dfs, like:
> outerlistmagic <- magic( df, innerlist )
> outerlistmagic
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]]
time
1 1
2 2
3 3
4 4
5 5
[[3]]
time
1 1
2 2
3 3
4 4
5 5
[[4]]
time
1 1
2 2
3 3
4 4
5 5
If you want df
to be a list element, you have to wrap it in list
because a data.frame is a list internally. For example:
append(list(df), innerlist)
c(list(df), innerlist)
As you recognised, c
is the correct function to combine lists. While a data.frame is also a list, c
will remove the data.frame attribute and drop it to a list containing a vector. You can protect this by wrapping it in another list:
c(list(df),innerlist)
[[1]]
time
1 1
2 2
3 3
4 4
5 5
[[2]]
time
1 1
2 2
3 3
4 4
5 5
[[3]]
time
1 1
2 2
3 3
4 4
5 5
[[4]]
time
1 1
2 2
3 3
4 4
5 5
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