我很好奇R中是否有一个函数可以完成从另一个数据集中查找相应值并根据该查找表替换多列数据的任务。
数据如下所示:
ID value_1 value_2 value_3
----------------------------
1 A - B
2 A C A
3 C A C
4 - - -
查找表如下所示:
letters amount
---------------
A 5
B 6
C 20
并且预期的输出应该如下所示:
ID value_1 value_2 value_3
----------------------------
1 5 - 6
2 5 20 5
3 20 5 20
4 - - -
答案 0 :(得分:2)
您可以尝试match
df1[-1] <- `dim<-`(df2$amount[match(as.matrix(df1[-1]),
df2$letters)], c(4,3))
df1[is.na(df1)] <- '-'
#wouldn't recommend to replace `NA` as it will convert to `character` class
df1
# ID value_1 value_2 value_3
#1 1 5 - 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 - - -
使用mutate_each
dplyr
选项
library(dplyr)
df1 %>%
mutate_each(funs(df2$amount[match(., df2$letters)]), -ID)
# ID value_1 value_2 value_3
#1 1 5 NA 6
#2 2 5 20 5
#3 3 20 5 20
#4 4 NA NA NA