R如何使用另一个作为字典的tibble重命名一个tibble中的变量

R How to rename variables in one tibble using another tibble serving as a dictionary

我想使用另一个用作字典的 tibble 来更改 tibble 的名称。

然而,我不知道 table 的变量的顺序是否与字典的行 相同。

唯一确定的是名字的第一个变量table 保存数据中的所有变量名

示例:

在最简单的情况下(不是这个问题)变量的顺序等于字典行的顺序

cars <- as_tibble(mtcars)

wanted_names <- tribble(~names, ~new,
                        "mpg","arbitary1",
                        "cyl","arbitary2",
                        "disp","x",
                        "hp","y",
                        "drat","f",
                        "wt","sss",
                        "qsec","ffff",
                        "vs","wvegsb",
                        "am","dhyhjn",
                        "gear","scsssfsf",
                        "carb","arbitaryn")
names(cars)

[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am""gear""carb"

我可以使用-

names(cars)<-wanted_names$new

但我不能保证 wanted_namescars 的顺序,所以它实际上看起来类似于:

cars <- as_tibble(mtcars) %>% 
  select(wt,hp,carb,everything())

wanted_names <- tribble(~names, ~new,
                        "wt","sss",
                        "qsec","ffff",
                        "vs","wvegsb",
                        "am","dhyhjn",
                        "disp","x",
                        "hp","y",
                        "drat","f",
                        "cyl","arbitary2",
                        "gear","scsssfsf",
                        "mpg","arbitary1",
                        "carb","arbitaryn")

任何可以确保正确重命名的方法将不胜感激。

一种方法是使用 match.

names(cars) <- wanted_names$new[match(names(cars),wanted_names$names)]
cars
#   arbitary1 arbitary2     x     y     f   sss  ffff wvegsb dhyhjn scsssfsf arbitaryn
#       <dbl>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>    <dbl>     <dbl>
# 1      21           6  160    110  3.9   2.62  16.5      0      1        4         4
# 2      21           6  160    110  3.9   2.88  17.0      0      1        4         4
# 3      22.8         4  108     93  3.85  2.32  18.6      1      1        4         1
# 4      21.4         6  258    110  3.08  3.22  19.4      1      0        3         1
# 5      18.7         8  360    175  3.15  3.44  17.0      0      0        3         2
# 6      18.1         6  225    105  2.76  3.46  20.2      1      0        3         1
# 7      14.3         8  360    245  3.21  3.57  15.8      0      0        3         4
# 8      24.4         4  147.    62  3.69  3.19  20        1      0        4         2
# 9      22.8         4  141.    95  3.92  3.15  22.9      1      0        4         2
#10      19.2         6  168.   123  3.92  3.44  18.3      1      0        4         4
# … with 22 more rows