Сравнение имен столбцов в R по различным фреймам данных - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время я пытаюсь сравнить классы столбцов и имена различных фреймов данных в R, прежде чем предпринимать какие-либо преобразования и вычисления. Код, который у меня есть, указан ниже:

library(dplyr)
m1 <-  mtcars
m2 <-  mtcars %>% mutate(cyl = factor(cyl), xxxx1 = factor(cyl))
m3 <-  mtcars %>% mutate(cyl = factor(cyl), xxxx2 = factor(cyl))

out <-  cbind(sapply(m1, class), sapply(m2, class), sapply(m3, class))

Если кто-то может решить эту проблему для фреймов данных, хранящихся в списке, это было бы здорово. Все мои данные хранятся в списке для упрощения обработки.

All.list <- list(m1,m2,m3)

Я ожидаю, что выходные данные отображаются в матричной форме, как показано в кадре данных "out". Вывод в "out" нежелателен, так как он неверен. Я ожидаю, что результат будет больше в следующем:

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Попробуйте compare_df_cols() из пакета janitor:

library(janitor)
compare_df_cols(All.list)

#>    column_name All.list_1 All.list_2 All.list_3
#> 1           am    numeric    numeric    numeric
#> 2         carb    numeric    numeric    numeric
#> 3          cyl    numeric     factor     factor
#> 4         disp    numeric    numeric    numeric
#> 5         drat    numeric    numeric    numeric
#> 6         gear    numeric    numeric    numeric
#> 7           hp    numeric    numeric    numeric
#> 8          mpg    numeric    numeric    numeric
#> 9         qsec    numeric    numeric    numeric
#> 10          vs    numeric    numeric    numeric
#> 11          wt    numeric    numeric    numeric
#> 12       xxxx1       <NA>     factor       <NA>
#> 13       xxxx2       <NA>       <NA>     factor

Принимает как список, так и / или отдельное имя data.frames, т. Е. compare_df_cols(m1, m2, m3).

Отказ от ответственности: я поддерживаю пакет janitor, к которому недавно была добавлена ​​эта функция, - разместив ее здесь, поскольку она касается именно этого варианта использования.

0 голосов
/ 12 ноября 2018

Я думаю, что самым простым способом было бы определить функцию, а затем использовать комбинацию lapply и dplyr для получения желаемого результата.Вот как я это сделал.

library(dplyr)
m1 <-  mtcars
m2 <-  mtcars %>% mutate(cyl = factor(cyl), xxxx1 = factor(cyl))
m3 <-  mtcars %>% mutate(cyl = factor(cyl), xxxx2 = factor(cyl))

All.list <- list(m1,m2,m3)


##Define a function to get variable names and types
my_function <- function(data_frame){
  require(dplyr)
  x <- tibble(`var_name` = colnames(data_frame),
              `var_type` = sapply(data_frame, class))
  return(x)
}


target <- lapply(1:length(All.list),function(i)my_function(All.list[[i]]) %>% 
mutate(element =i)) %>%
  bind_rows() %>%
  spread(element, var_type)

target
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...