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"))
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"))