首页 > 解决方案 > 列重命名不适用于一个特定的列-R

问题描述

我正在使用大型数据集,这些数据集在公共列名前面都有不同的数字。我创建了一个函数,可以成功更改除一个之外的所有列名。见下文 “MOTH PD JB R YNG”=“MOTHR PAID JOB”,

vars_renamed <- function(.data){rename(.data, contains(c("R'S SEX" = "R'S SEX",
                      "HRS/W WRK SCHYR" = "HRS/W WRK SCHYR",
                      "R'S RACE" = "R'S RACE",
                      "FATHR EDUC LEVEL" = "FATHR EDUC LEVEL",
                      "MOTHR EDUC LEVEL" = "MOTHR EDUC LEVEL",
                      **"MOTH PD JB R YNG" = "MOTHR PAID JOB",**
                      "R'S HSHLD ALONE" = "R'S HSHLD ALONE",
                      "DALY CMNTY AFFRS" = "DALY CMNTY AFFRS",
                      "DALY ALONE LEISR" = "DALY ALONE LEISR",
                      "SCH ACTV-ATHLTCS" = "SCH ACTV-ATHLTCS",
                      "SCH ACTV-OTH ACT" = "SCH ACTV-OTH ACT",
                      "YRS PRF ARTS-OUT" = "YRS PRF ARTS-OUT",
                      "YRS VOCATNL CLUB" = "YRS VOCATNL CLUB",
                      "YRS BOYS/GRLS CL" = "YRS BOYS/GRLS CL",
                      "YRS PRT-TIME JOB" = "YRS PRT-TIME JOB",
                      "DALY ACTV SPORTS" = "DALY ACTV SPORTS",
                      "SCH ACTV-PBLCTNS" =  "SCH ACTV-PBLCTNS",
                      "SCH ATV-ACDMC CL" = "SCH ATV-ACDMC CL",
                      "YRS OTH CLB/ACTV" = "YRS OTH CLB/ACTV",
                      "YRS HOBBY CLUB" = "YRS HOBBY CLUB",
                      "YRS COMMNTY ORGZ" = "YRS COMMNTY ORGZ",
                      "DALY VIST W/FRDS" = "DALY VIST W/FRDS",
                      "SCH ACTV-PRF ART" = "SCH ACTV-PRF ART",
                      "SCH ATV-STDN GVT" = "SCH ATV-STDN GVT",
                      "YRS SPORTS-OUTSC" = "YRS SPORTS-OUTSC",
                      "YRS SCOUTING" = "YRS SCOUTING",
                      "YRS CHRCH YTH GR" = "YRS CHRCH YTH GR", all = TRUE )))}

除一列外,所有其他列都成功更改。任何人都可以帮助解释为什么这可能不起作用?该功能混乱但有效,我只是无法弄清楚为什么它不起作用。

标签: r

解决方案


尝试这个。

vars_renamed <- function(nms) {
  vec <- c("R'S SEX" = "R'S SEX",
                    "HRS/W WRK SCHYR" = "HRS/W WRK SCHYR",
                    "R'S RACE" = "R'S RACE",
                    "FATHR EDUC LEVEL" = "FATHR EDUC LEVEL",
                    "MOTHR EDUC LEVEL" = "MOTHR EDUC LEVEL",
                    "MOTH PD JB R YNG" = "MOTHR PAID JOB",
                    "R'S HSHLD ALONE" = "R'S HSHLD ALONE",
                    "DALY CMNTY AFFRS" = "DALY CMNTY AFFRS",
                    "DALY ALONE LEISR" = "DALY ALONE LEISR",
                    "SCH ACTV-ATHLTCS" = "SCH ACTV-ATHLTCS",
                    "SCH ACTV-OTH ACT" = "SCH ACTV-OTH ACT",
                    "YRS PRF ARTS-OUT" = "YRS PRF ARTS-OUT",
                    "YRS VOCATNL CLUB" = "YRS VOCATNL CLUB",
                    "YRS BOYS/GRLS CL" = "YRS BOYS/GRLS CL",
                    "YRS PRT-TIME JOB" = "YRS PRT-TIME JOB",
                    "DALY ACTV SPORTS" = "DALY ACTV SPORTS",
                    "SCH ACTV-PBLCTNS" =  "SCH ACTV-PBLCTNS",
                    "SCH ATV-ACDMC CL" = "SCH ATV-ACDMC CL",
                    "YRS OTH CLB/ACTV" = "YRS OTH CLB/ACTV",
                    "YRS HOBBY CLUB" = "YRS HOBBY CLUB",
                    "YRS COMMNTY ORGZ" = "YRS COMMNTY ORGZ",
                    "DALY VIST W/FRDS" = "DALY VIST W/FRDS",
                    "SCH ACTV-PRF ART" = "SCH ACTV-PRF ART",
                    "SCH ATV-STDN GVT" = "SCH ATV-STDN GVT",
                    "YRS SPORTS-OUTSC" = "YRS SPORTS-OUTSC",
                    "YRS SCOUTING" = "YRS SCOUTING",
                    "YRS CHRCH YTH GR" = "YRS CHRCH YTH GR")
  ind <- which(outer(names(vec), nms, Vectorize(grepl)), arr.ind = TRUE)
  nms[ind[,2]] <- vec[ind[,1]]
  nms
}

它的用途:

data.frame("MOTH PD JB R YNG"=2, "R's HSHLD ALONE"=1, check.names=FALSE) %>%
  rename_with(.fn = vars_renamed)
#   MOTHR PAID JOB R's HSHLD ALONE
# 1              2               1

推荐阅读