替换 r 中两个数据帧之间的所有列值

Replacing all column values between two dataframes in r

我有两个数据框。一个包含对我正在研究的主题的观察。但是,由于调查,变量从显示参与者的国家名称转换为数字,因此我下载了一个 table,其中国家代码(例如 31 是加拿大等)在 df 中,其中包含数字和国家。 我想用第二个数据框中的国家替换原始数据框中的数字,但每次都失败。

这里我使用了一个示例数据框:

df1 <- data.frame(list(Country=c("1","3","4","2"), Obs=c("Stuff1","Stuff2","Stuff3","Stuff4")))
df2 <- data.frame(list(Number=c("1","2","3","4"), Country=c("C1","C2","C3","C4")))

我想要的结果是df1中的Country变量由数字转换为国名(我的数据集中都是字符变量包括国家数字,如果更好可以转换为数字)。

到目前为止,我在尝试以下操作后都失败了:

df1 <- df1 %>% 
  mutate_at(c("Country"), funs(recode(.,'df1[,1]'=df2[,2])))

df1$newcountry <- data$Country[match(df1$Country, df2$Country)]

这个有用吗:

library(dplyr)
df1 %>% inner_join(df2, by = c('Country' = 'Number')) %>% 
rename(N = Country, Country = Country.y) %>% select(-1)
     Obs Country
1 Stuff1      C1
2 Stuff2      C3
3 Stuff3      C4
4 Stuff4      C2
 
library(tidyverse)
df1 <- data.frame(list(Country=c("1","3","4","2"), 
                       Obs=c("Stuff1","Stuff2","Stuff3","Stuff4")))
df2 <- data.frame(list(Number=c("1","2","3","4"), 
                       Country=c("C1","C2","C3","C4")))

df1 %>% rename(Number = Country) %>% 
  left_join(df2, by = "Number")
  Number    Obs Country
1      1 Stuff1      C1
2      3 Stuff2      C3
3      4 Stuff3      C4
4      2 Stuff4      C2