查找并替换为不匹配的批量

时间:2018-06-20 21:20:12

标签: r match

我有一个看起来像这样的数据框。

df.uid <- c(100, 101, 102, 103, 104)
df.code <- c("AA", "BB", "CC", "1000", "1001")
df <- data.frame(df.uid, df.code)
df
  df.uid df.code
1    100      AA
2    101      BB
3    102      CC
4    103    1000
5    104    1001

我有一个看起来像这样的查找表。

lookup.id <- c("1000", "1001")
lookup.code <- c("DD", "EE")
lookup <- data.frame(lookup.id, lookup.code)
lookup
  lookup.id lookup.code
1      1000          DD
2      1001          EE

我使用以下代码用查找表替换了错误的代码,但出现错误。

df$df.code <- lookup$lookup.code[match(df$df.code, lookup$lookup.id, nomatch = 0)]
Error in `$<-.data.frame`(`*tmp*`, df.code, value = 1:2) : 
  replacement has 2 rows, data has 5

如果我取出nomatch = 0,它将把好的数据替换为NA

df$df.code <- lookup$lookup.code[match(df$df.code, lookup$lookup.id)]
df
      df.uid df.code
1    100    <NA>
2    101    <NA>
3    102    <NA>
4    103      DD
5    104      EE

我如何做到这一点,以便使好的数据保持原样?

1 个答案:

答案 0 :(得分:0)

dplyr软件包作为recode函数可以提供帮助。像

df$df.code <- recode(df$df.code, !!!rlang::set_names(as.list(lookup.code), lookup.id))