问题描述
假设我在 R 中有一个数据集,其中包含名为 dog
cat
和 cow
的变量。然后每个变量下都有一些值(即,如果受访者拥有一个,则每个值为 =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
解决方法
如果'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'等列,并且想用canine1
、canine2
等替换,我们可以使用{{ 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