Storing multiple data frames into one data structure - R

前端 未结 3 716
情歌与酒
情歌与酒 2020-12-24 14:16

Is it possible to have multiple data frames to be stored into one data structure and process it later by each data frame? i.e. example

df1 <- data.frame(c         


        
相关标签:
3条回答
  • 2020-12-24 14:53

    Lists can be used to hold almost anything, including data.frames:

    ## Versatility of lists
    l <- list(file(), new.env(), data.frame(a=1:4))
    

    For writing out multiple data objects stored in a list, lapply() is your friend:

    ll <- list(df1=df1, df2=df2)
    ## Write out as *.csv files
    lapply(names(ll), function(X) write.csv(ll[[X]], file=paste0(X, ".csv")))
    ## Save in *.Rdata files
    lapply(names(ll), function(X) {
        assign(X, ll[[X]]) 
        save(list=X, file=paste0(X, ".Rdata"))
    })
    
    0 讨论(0)
  • 2020-12-24 15:02

    Just put the data.frames in a list. A plus is that a list works really well with apply style loops. For example, if you want to save the data.frame's, you can use mapply:

    l = list(df1, df2)
    mapply(write.table, x = l, file = c("df1.txt", "df2.txt"))
    

    If you like apply style loops (and you will, trust me :)) please take a look at the epic plyr package. It might not be the fastest package (look data.table for fast), but it drips with syntactic sugar.

    0 讨论(0)
  • 2020-12-24 15:05

    What you are looking for is a list. You can use a function like lapply to treat each of your data frames in the same manner sperately. However, there might be cases where you need to pass your list of data frames to a function that handles the data frames in relation to each other. In this case lapply doesn't help you.

    That's why it is important to note how you can access and iterate the data frames in your list. It's done like this:

    mylist[[data frame]][row,column]
    

    Note the double brackets around your data frame index. So for your example it would be

    df1 <- data.frame(c(1,2,3), c(4,5,6))
    df2 <- data.frame(c(11,22,33), c(44,55,66))
    mylist<-list(df1,df2)
    

    mylist[[1]][1,2] would return 4, whereas mylist[1][1,2] would return NULL. It took a while for me to find this, so I thought it might be helpful to post here.

    0 讨论(0)
提交回复
热议问题