有没有办法用新的dplyr::recode
函数进行这种评估?
1:5 = 'category1
LETTERS[1:5] = 'category2'
c(‘A’, ‘C’) = 'category3’
我在家庭/劳动力调查微数据处理方面进行了广泛的工作,并希望与您分享我的经验。
例如,使用plyr::revalue
或plyr::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
语法要好得多!