用另一个数据框中的数值重新编码一个数据框中的字符变量列
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
中的数值重新编码 df
的 x
列中的字符变量,以便我有一个新的数据框?
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
我有以下数据框:
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
中的数值重新编码 df
的 x
列中的字符变量,以便我有一个新的数据框?
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