Search code examples
rdataframeenvironment-variablesnames

Column names into data frame


How can I create a data frame which contains the column names of all Environment objects (df)

Ex. Having this 3 df as all the objects in the global environment.

chocolate <- data.frame(a = 1, b = 2, c = 3)
banana <- data.frame(a = 2, d = 4, c = 3)
pear <- data.frame(d = 1, e = 4)

Desired output

output <- data.frame(id = c("chocolate","banana", "pear"), 
                 v2 = c("a", "a", NA), 
                 v3 = c("b", NA, NA), 
                 v4 = c("c", "c", NA), 
                 v5 = c(NA, "d", "d"), 
                 v6 = c(NA, NA, "e"))
output

Solution

  • We can try

    library(data.table)
    lst <- mget(paste0("df", 1:3))
    setnames(rbindlist(lapply(setNames(lst, seq_along(lst)), function(x) {
             x[] <- names(x)
               x}), fill = TRUE, idcol = 'id'), 2:6,  paste0("V", 1:5))[] 
    #   id V1 V2 V3 V4 V5
    #1:  1  a  b  c NA NA
    #2:  2  a NA  c  d NA
    #3:  3 NA NA NA  d  e