我有两个不同的对象:
AUX <- data.frame(SPANISH = c("Si", "No", "Tal vez"),
ENGLISH = c("Yes", "No", "Perhaps"))
TAB <- data.frame(V1 = c(18, 15, 19, 23),
V2 = c("Si", "Si", "No", "Si"),
V3 = c("Tal vez", "No", "No", "Si"))
我想替换
TAB
中出现的值 AUX
;也就是说,如果 TAB 中有一个“Si”,您想将其替换为“Yes”广告,依此类推。
这是一个玩具示例,我真正拥有的是两个比此处介绍的两个更大的 data.frame。 使用
TAB
中的信息替换 AUX
中的值的最快方法是什么? 我看到了一些关于使用 mutate
的建议,但是有没有更快的替代方案?
提前致谢
这是一种可能的
data.table
方法...我打赌它也可以通过一些巧妙的连接来实现,但是除了huuuge data.tables之外,这应该可以正常工作
library(data.table)
setDT(AUX); setDT(TAB)
# melt to long
TAB.long <- melt(TAB, id.vars = "V1")
# update
TAB.long[AUX, value := i.ENGLISH, on = .(value = SPANISH)]
# cast to wide again
TAB.new <- dcast(TAB.long, V1 ~ variable, value.var = "value")
# V1 V2 V3
# <num> <char> <char>
# 1: 15 Yes No
# 2: 18 Yes Perhaps
# 3: 19 No No
# 4: 23 Yes Yes