重新编码列数值变量

时间:2016-06-28 15:43:25

标签: r recode

我有一个更大的数据集,我需要将列numercal variable更改为categorical variable。数据样本如下:

dat1 <- read.table(header=TRUE, text="
                   ID  Pa  Gu  Ta
                   8645    1  Gel294  Tel452
                   6228    2  Gel294  Tel467
                   5830    3  Gel294  Tel467
                   1844    3  Gel295  Tel467
                   4461    4  Gel295  Tel467
                   2119    5  Gel294  Tel452
                   2119    5  Gel294  Tel452
                   ")
dat1
    ID Pa     Gu     Ta
1 8645  1 Gel294 Tel452
2 6228  2 Gel294 Tel467
3 5830  3 Gel294 Tel467
4 1844  3 Gel295 Tel467
5 4461  4 Gel295 Tel467
6 2119  5 Gel294 Tel452
7 2119  5 Gel294 Tel452

Pa中的变量需要替换为以下内容:

dat2 <- read.table(header=TRUE, text="
                   Pa  Abbr  
                   1    MNDF
                   2    CVDE
                   3    EEED
                   4    WERD
                   5    PPOL
                   ")
dat2
  Pa Abbr
1  1 MNDF
2  2 CVDE
3  3 EEED
4  4 WERD
5  5 PPOL

对于较小的数据集,我可以通过recode包中的car函数手动执行此操作。

library(car)
dat1$Pa <- recode(dat1$Pa, "1='MNDF'; 2='CVDE'; 3='EEED'; 4='WERD'; 5='PPOL'")
dat1
    ID   Pa     Gu     Ta
1 8645 MNDF Gel294 Tel452
2 6228 CVDE Gel294 Tel467
3 5830 EEED Gel294 Tel467
4 1844 EEED Gel295 Tel467
5 4461 WERD Gel295 Tel467
6 2119 PPOL Gel294 Tel452
7 2119 PPOL Gel294 Tel452

我需要一个适当的功能或代码来代替重新编码中的手动输入。

1 个答案:

答案 0 :(得分:1)

我们可以使用match

中的base R
dat1$Pa <- dat2$Abbr[match(dat1$Pa, dat2$Pa)]
dat1
#    ID   Pa     Gu     Ta
#1 8645 MNDF Gel294 Tel452
#2 6228 CVDE Gel294 Tel467
#3 5830 EEED Gel294 Tel467
#4 1844 EEED Gel295 Tel467
#5 4461 WERD Gel295 Tel467
#6 2119 PPOL Gel294 Tel452
#7 2119 PPOL Gel294 Tel452