【问题标题】:Get column names for all dataframes in R获取 R 中所有数据框的列名
【发布时间】:2020-07-08 14:36:23
【问题描述】:

我在 R 中有大量数据帧。现在我希望针对每个数据帧的所有列名都有一个可读的输出

假设有三个数据框 A、B、C,具有不同的列数和不同的列名,如 c("Col1", "Col2","Col3"), c("Col4", "Col5" ) 和 c("Col6", "Col7", "Col8", "Col9", "COl10") 分别

现在我想要这样的输出

注意:我的意图是稍后将其写入 .csv 文件并根据要求打破列名(用制表符分隔或“,”分隔)

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这是一个刺。

    df1 <- data.frame(a=1,b=2,c=3)
    df2 <- data.frame(A=1,E=2)
    df3 <- data.frame(quux=7,cronk=9)
    dfnms <- rownames(subset(ls.objects(), Type %in% c("data.frame", "tbl_df", "data.table")))
    dfnms
    # [1] "df1" "df2" "df3"
    data.frame(name = dfnms, columns = sapply(mget(dfnms), function(x) paste(colnames(x), collapse = ",")))
    #     name    columns
    # df1  df1      a,b,c
    # df2  df2        A,E
    # df3  df3 quux,cronk
    

    如果确实需要双引号,则添加dQuote,如

    data.frame(name = dfnms, columns = sapply(mget(dfnms), function(x) paste(dQuote(colnames(x)), collapse = ",")))
    #     name        columns
    # df1  df1    "a","b","c"
    # df2  df2        "A","E"
    # df3  df3 "quux","cronk"
    

    【讨论】:

      【解决方案2】:

      我把我的工作放在这里,虽然它类似于 r2evans 的解决方案。

      数据

      A <- data.frame(col1=1:2, col2=1:2, col3=1:2)
      B <- data.frame(col4=1:2, col5=1:2)
      C <- data.frame(col6=1:2, col7=1:2, col8=1:2, col9=1:2, col10=1:2)
      

      代码

      DataFrameName = c('A', 'B', 'C')
      data.frame(DataFrameName    = DataFrameName, 
                 Columns          = sapply(DataFrameName, function(x) paste(names(get(x)), collapse = ",")), 
                 stringsAsFactors = FALSE)
      

      输出

      #   DataFrameName                   Columns
      # A             A            col1,col2,col3
      # B             B                 col4,col5
      # C             C col6,col7,col8,col9,col10
      

      【讨论】:

        【解决方案3】:

        使用tidyverse,我们可以通过lst获取list中的数据集,然后遍历list,获取列名,将其转换为字符串,将命名字符串的list获取到带有enframeunnest 'Columns' 的两列小标题

        library(dplyr)
        library(tidyr)
        librarry(purrr)
        lst(A, B, C) %>%
            map(~ .x %>% names %>% toString) %>%
            enframe(name = "DataFrameName", value = "Columns") %>%
            unnest(c(Columns))
        # A tibble: 3 x 2
        #  DataFrameName Columns                      
        #  <chr>         <chr>                        
        #1 A             Col1, Col2, Col3             
        #2 B             Col1, Col5                   
        #3 C             Col6, Col7, Col8, Col9, Col10
        

        数据

        A <- data.frame(Col1 = 1:5, Col2 = 6:10, Col3 = 11:15)
        B <- data.frame(Col1 = 1:5, Col5 = 6:10)
        C <- data.frame(Col6 =1:5, Col7 = 6:10, Col8 = 6:10, Col9 = 7:11, Col10 = 11:15)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-08
          • 1970-01-01
          • 1970-01-01
          • 2022-11-07
          • 1970-01-01
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多