根据另一个数据帧中的键更改 R 中的变量名称

时间:2021-06-23 17:43:12

标签: r dataframe replace variable-names

假设我在 R 中有一个数据集,其中包含名为 dog catcow 的变量。然后每个变量下都有一些值(即,如果受访者拥有一个,则每个值为 =1,否则为 =0):

household_ID   dog   cat   cow
00001          0     1     1
00002          1     0     1
00003          0     0     0

假设我有另一个数据集,其中一列包含我的当前变量,另一列包含新变量名称,这样每一行都包含应替换旧名称的新名称:

oldname  newname
dog      canine
cat      feline
cow      bovine

在这个过于简化的示例中,我的目标是使用第二个数据集替换第一个数据集的变量名称。我在想象你 replace var = newname if var = oldname 的某种循环,但我无法获得正确的语法,我有点难住。这是我假设的目标:

household_ID   canine   feline   bovine
00001          0        1        1
00002          1        0        1
00003          0        0        0

1 个答案:

答案 0 :(得分:1)

如果'cow'是第二个数据中'oldname'的第三个值,我们可以使用rename_with

library(dplyr)
df1 <- df1 %>%
     rename_with(~ df2$newname, df2$oldname)

-输出

df1
   household_ID canine feline bovine
1            1      0      1      1
2            2      1      0      1
3            3      0      0      0

或者可以使用 setnames 中的 data.table

library(data.table)
setDT(df1)
setnames(df1, df2$oldname, df2$newname)

更新

如果OP的数据有'dog1'、'dog2'、'cat1'、'cat2'等列,并且想用canine1canine2等替换,我们可以使用{{ 1}}

str_replace_all

-输出

library(stringr)
library(tibble)
names(df1new)[-1] <- str_replace_all(names(df1new)[-1], deframe(df2))

数据

df1new
  household_ID canine1 feline1 bovine1 canine2 feline2
1            1       0       1       1       0       1
2            2       1       0       1       1       0
3            3       0       0       0       0       0
相关问题