Получить имена столбцов для всех фреймов данных в R - PullRequest
1 голос
/ 27 марта 2020

У меня есть большое количество фреймов данных в R. Теперь я хочу получить читаемый вывод для всех имен столбцов для каждого фрейма данных

Допустим, есть три фрейма данных A, B, C с разными количество столбцов и имена различных столбцов, такие как c ("Col1", "Col2", "Col3"), c ("Col4", "Col5") и c ("Col6", "Col7", "Col8", "Col9", "COl10") соответственно

Теперь я хочу получить такой вывод

enter image description here

Примечание : Мое намерение состоит в том, чтобы позже записать его в файл .csv и разбить имена столбцов в соответствии с требованием (разделенных табуляцией или "," разделенными)

Ответы [ 3 ]

4 голосов
/ 27 марта 2020

Вот удар.

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 голосов
/ 27 марта 2020

Я размещаю здесь свою работу, хотя она похожа на решение 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
1 голос
/ 27 марта 2020

С tidyverse мы можем получить наборы данных в list с lst, затем l oop над list, получить имена столбцов, преобразовать их в строку, получить list из именованные строки в столбце из двух столбцов с enframe и unnest в столбцах

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

data

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...