在R中替换/ Vlookup类型函数

时间:2015-01-20 16:02:48

标签: r replace lookup

我很好奇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  -         -         -

1 个答案:

答案 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