用另一个数据框中的数值重新编码一个数据框中的字符变量列

Recode column of character variables in one data frame with numeric values in another data frame

我有以下数据框:

df <- data.frame(x=c('a', 'b', 'c'), y=c(.1,.2,.3))
xev_values <- data.frame(a=.01, b=.02, c=.03)

如何使用 xev_values 中的数值重新编码 dfx 列中的字符变量,以便我有一个新的数据框?

new_df <- data.frame(xev=c(.01,.02,.03), y=c(.1,.2,.3))

我知道如何使用重新编码来做到这一点 "manually":

new_df <- data.frame(xev=recode(df$x, 'a'=.01, 'b'=.02, 'c'=.03), y=df$y)

如果 xev_values 中只有一行,我们可以将 df 中的 x 列与 names(xev_values) 中的 x 列进行比较,并提取相应的列值。

df$x <- unlist(xev_values[1, match(df$x, names(xev_values))])

df 
#     x   y
#1 0.01 0.1
#2 0.02 0.2
#3 0.03 0.3

我们可以将 xev_values 转换为长格式,进行连接,然后 select 列。

library(tidyverse)

df2 <- df %>%
  left_join(xev_values %>% gather(x, xev), by = "x") %>%
  select(xev, y)
df2
#    xev   y
# 1 0.01 0.1
# 2 0.02 0.2
# 3 0.03 0.3