【问题标题】:Mapping specific datatypes to specific columns via lookup table通过查找表将特定数据类型映射到特定列
【发布时间】:2018-09-21 03:16:12
【问题描述】:

我正在处理大型数据集,通常很难始终知道数值是否应作为连续特征处理,或者它们是否代表分类值。其他时候,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..

【问题讨论】:

    标签: r purrr readr


    【解决方案1】:

    我认为 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 ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多