我有一个看起来像这样的数据框。
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
我如何做到这一点,以便使好的数据保持原样?
答案 0 :(得分:0)
将dplyr
软件包作为recode
函数可以提供帮助。像
df$df.code <- recode(df$df.code, !!!rlang::set_names(as.list(lookup.code), lookup.id))