使用dplyr(R)根据查找表重新编码值

使用dplyr(R)根据查找表重新编码值,r,dplyr,lookup,recode,R,Dplyr,Lookup,Recode,一个相对琐碎的问题困扰了我一段时间,但我还没有找到答案——也许是因为我在为搜索引擎描述这个问题时遇到了麻烦 下面是一列包含标识符的数据帧 data <- data.frame("id" = c("D78", "L30", "F02", "A23", "B45", "T01", "Q38", "S30", &quo

一个相对琐碎的问题困扰了我一段时间,但我还没有找到答案——也许是因为我在为搜索引擎描述这个问题时遇到了麻烦

下面是一列包含标识符的数据帧

data <- data.frame("id" = c("D78", "L30", "F02", "A23", "B45", "T01", "Q38", "S30", "K84", "O04", "P12", "Z33")) 
数据您可以在命名向量上使用无引号拼接(
!!!

library(dplyr)

# vector of new IDs
recode_vec <- recode_table$new
# named with old IDs
names(recode_vec) <- recode_table$old

data %>% 
  mutate(id = recode(id, !!!recode_vec))
#     id
# 1  D78
# 2  L30
# 3  F02
# 4  A24
# 5  B46
# 6  T01
# 7  Q38
# 8  S30
# 9  K88
# 10 O04
# 11 P12
# 12 Z33
库(dplyr)
#新IDs的向量
重新编码
for(ID in recode_table$old) {
  data[data$id == ID, "id"] <- recode_table[recode_table$old == ID, "new"]
}
    data <- mutate(data, id = ifelse(id %in% recode_table$old, filter(recode_table, old == id) %>% pull(new), id))
library(dplyr)

# vector of new IDs
recode_vec <- recode_table$new
# named with old IDs
names(recode_vec) <- recode_table$old

data %>% 
  mutate(id = recode(id, !!!recode_vec))
#     id
# 1  D78
# 2  L30
# 3  F02
# 4  A24
# 5  B46
# 6  T01
# 7  Q38
# 8  S30
# 9  K88
# 10 O04
# 11 P12
# 12 Z33