dplyr重新编码新函数

时间:2016-06-21 07:06:56

标签: r dplyr

有没有办法用新的dplyr::recode函数进行这种评估?

1:5 = 'category1

LETTERS[1:5] = 'category2'

c(‘A’, ‘C’) = 'category3’

我在家庭/劳动力调查微数据处理方面进行了广泛的工作,并希望与您分享我的经验。

例如,使用plyr::revalueplyr::mapvalues将年龄数字变量(1:150)重新编码为分类变量并不容易。

因为您应该明确定义哪个数字属于哪个类别:

require(plyr)
my.df1 <- data.frame(age = 1:150) %>% 
            mutate(  
               age_5yrbands = age %>%
                            mapvalues(from = c(1:150) ,
                                      to = c(rep(NA, 14),
                                             rep('15-19', 5),
                                             rep('20-24', 5),
                                             rep('25-29', 5),
                                             rep('30-34', 5),
                                             rep('35-39', 5),
                                             rep('40-44', 5),
                                             rep('45-49', 5),
                                             rep('50-54', 5),
                                             rep('55-59', 5),
                                             rep('60-64', 5),
                                             rep('65+', 86)) )
)

所以我使用了car包(重新编码):

require(car)
require(dplyr)
my.df <- data.frame(age = 1:150) %>% 
           mutate(  
             age_5yrbands = age  %>% 
                           recode("  15:19 = '15-19';
                                     20:24 = '20-24';
                                     25:29 = '25-29';
                                     30:34 = '30-34';
                                     35:39 = '35-39';
                                     40:44 = '40-44';
                                     45:49 = '45-49';
                                     50:54 = '50-54';
                                     55:59 = '55-59';
                                     60:64 = '60-64';
                                     65:150 = '65+';
                                     else = NA ",
                          as.factor.result = TRUE),
              age_10yrbands = age_5yrbands %>%
                          recode("  c('15-19', '20-24') = '15-24';
                                    c('25-29', '30-34') = '25-34';
                                    c('35-39', '40-44') = '35-44';
                                    c('45-49', '50-54') = '45-54';
                                    c('55-59', '60-64') = '55-64';
                                    '65+' = '65+';
                                    else = NA",
                           as.factor.result = TRUE)
)

年龄可以被认为是相对简单的,但是当你开始使用2位数字的国际标准分类时,编码开始很长并且错误的风险非常高,如职业:ISCO88,教育:ISCED11,经济活动ISIC4)。

我也可以使用cut,但dplyr语法要好得多!

0 个答案:

没有答案