1

我有一个更大的数据集,我需要将一列更改numercal variablecategorical 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

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

4

1 回答 1

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
于 2016-06-28T15:46:43.267 回答