R:R 中是否有一种方法可以使用字典替换向量的值(具有新旧值的 2 列数据框)

R: Is there a method in R, to substiute the values of a vector using a dictionary (2 column dataframe with old and new value)

R 中是否有一种方法可以使用字典替换向量的值(具有新旧值的 2 列数据框)

我知道的唯一方法是将旧值提取到数据框中,并将其与我所说的字典(这是一个包含旧值和新值的两列数据框)合并。之后将新值重新分配给原来的旧值。但是,似乎在使用 merge 时(至少从 R v4.1 开始,x 值的顺序没有得到维护,所以我现在使用 join 来保持数据帧 x 的原始顺序不变。我认为必须有一个更简单的方法,我只是没有找到它。希望这是可以理解的,我感谢任何帮助。

干杯赫尔曼

您可以使用命名字符向量作为字典进行替换,方法是在 dplyr::recode 中用 !!! 取消引号。如果您将“dict”存储为两列数据框,那么 tidyr::deframe 可能会很方便。

library(tidyverse)

x <- c("a", "b", "c")

dict <- tribble(
  ~old, ~new, 
  "a",  "d",
  "b",  "e",
  "c",  "f"
)

recode(x, !!!deframe(dict))
#> [1] "d" "e" "f"

reprex package (v1.0.0)

于 2021 年 6 月 14 日创建

您可以使用 match 使用字典替换向量的值:

D$new[match(x, D$old)]
#[1] "d" "e" "f"

您还可以使用名称来获取新值:

L <- setNames(D$new, D$old)
L[x]
#"d" "e" "f" 

数据:

x <- c("a", "b", "c")
D <- data.frame(old = c("a", "b", "c"), new = c("d", "e", "f"))