Сопоставление определенных типов данных с определенными столбцами с помощью таблицы поиска

Я работаю с большими наборами данных, где часто бывает трудно всегда знать, следует ли обрабатывать числовые значения как непрерывный признак или они представляют собой категориальное значение. В других случаях R ошибается и назначает что-то символом, хотя на самом деле это число.

Я надеюсь создать таблицу поиска для сопоставления определенных типов данных с определенными столбцами - по имени. Есть ли способ сделать это с помощью пакета purrr или чего-то подобного?

Например:

mylookup_table =data.frame(column_names = c('mpg','vs','hp'), column_types = c('numeric','factor','character') )
#
 #apply to mtcars for just these columns..

person runningbirds    schedule 21.09.2018    source источник


Ответы (1)


Я предполагаю, что гуру муррр мог бы показать, как это сделать более элегантно, но, учитывая, что в R не так уж много типов данных, это не так уж плохо:

library(tidyverse)
mylookup_table <- data_frame(
  column_names = c('mpg','vs','hp'), 
  column_types = c('numeric','factor','character'))

mylookup_chars <- mylookup_table[mylookup_table$column_types == "character", 1]
mylookup_nums <- mylookup_table[mylookup_table$column_types == "numeric", 1]
mylookup_factors <- mylookup_table[mylookup_table$column_types == "factor", 1]


mtcars %>%
  purrr::map_at(mylookup_chars$column_names, as.character) %>% 
  purrr::map_at(mylookup_nums$column_names, as.numeric) %>% 
  purrr::map_at(mylookup_factors$column_names, as.factor) %>% 
  str()

List of 11
 $ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num [1:32] 160 160 108 258 360 ...
 $ hp  : chr [1:32] "110" "110" "93" "110" ...
 $ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
 $ vs  : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
 $ am  : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
person Jon Spring    schedule 21.09.2018