Перекодировать столбец символьных переменных в одном фрейме данных с числовыми значениями в другом фрейме данных - PullRequest
0 голосов
/ 28 октября 2018

У меня есть следующие кадры данных:

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 с числовыми значениями в xev_values, чтобы у меня был новый кадр данных?

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

Я вижу, как это сделать "вручную" с перекодированием:

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

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Мы можем преобразовать 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
0 голосов
/ 28 октября 2018

Если у вас есть только одна строка в 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
...