通过查找将特定数据类型映射到特定列 table
Mapping specific datatypes to specific columns via lookup table
我正在处理大型数据集,在这些数据集中,通常很难始终知道数值是否应作为连续特征处理,或者它们是否代表分类值。其他时候,R 会弄错并在实际上是数字时将其指定为字符。
我希望构建一个查找 table 以将特定数据类型映射到特定列 - 按名称。有没有办法用 purrr 包或类似的东西来做到这一点?
例如:
mylookup_table =data.frame(column_names = c('mpg','vs','hp'), column_types = c('numeric','factor','character') )
#
#apply to mtcars for just these columns..
我想 purrr 大师可以展示如何更优雅地做到这一点,但鉴于 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 ...
我正在处理大型数据集,在这些数据集中,通常很难始终知道数值是否应作为连续特征处理,或者它们是否代表分类值。其他时候,R 会弄错并在实际上是数字时将其指定为字符。
我希望构建一个查找 table 以将特定数据类型映射到特定列 - 按名称。有没有办法用 purrr 包或类似的东西来做到这一点?
例如:
mylookup_table =data.frame(column_names = c('mpg','vs','hp'), column_types = c('numeric','factor','character') )
#
#apply to mtcars for just these columns..
我想 purrr 大师可以展示如何更优雅地做到这一点,但鉴于 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 ...