我有以下数据框:
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))
答案 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