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

时间:2018-10-28 13:54:25

标签: r dataframe dplyr tidyverse recode

我有以下数据框:

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

如何用x中的数值重新编码df的{​​{1}}列中的字符变量,以便获得新的数据框?

xev_values

我看到如何通过重新编码“手动”执行此操作:

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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