我有一个带有字符元素的数据框。我需要通过引用另一个数据框架来替换元素。数据帧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
答案 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