用另一个变量替换数据框中的元素

时间:2019-12-04 06:46:31

标签: r

我有一个带有字符元素的数据框。我需要通过引用另一个数据框架来替换元素。数据帧1的列名可以是任意值,必须替换数据而不引用列名。

 data-frame_1                         data-frame_2

Jan-12  Feb-12                       rating  Order
 ab       ac                          ab      1
 ac       ab                          ac      2

apply(data-frame_1,2,function(x){mapvalues(x,data-frame_2$rating,data-frame_2$Order)})

我尝试使用Apply函数,但无法正常工作。 我正在尝试获取此输出

 data-frame_1                        

Jan-12  Feb-12                       
   1       2                          
   2       1      

2 个答案:

答案 0 :(得分:2)

一个选项是match

df1[] <- lapply(df1, function(x) df2$Order[match(x, df2$rating)])

或与sapply

sapply(df1, function(x) df2$Order[match(x, df2$rating)])
#     Jan-12 Feb-12
#[1,]      1      2
#[2,]      2      1

数据

df1 <- structure(list(`Jan-12` = c("ab", "ac"), `Feb-12` = c("ac", "ab"
)), class = "data.frame", row.names = c(NA, -2L))

df2 <- structure(list(rating = c("ab", "ac"), Order = 1:2), 
class = "data.frame", row.names = c(NA, 
-2L))

答案 1 :(得分:1)

您可以使用setNames创建查找向量

lup  <- setNames(df2$Order, df2$rating)
df1[]  <- lup[unlist(df1)]
df1
#  Jan-12 Feb-12
#1      1      2
#2      2      1