如何用另一个值替换列中的所有值?

How to replace all values in a column with another value?

假设我有一个包含两列的数据框 df

id category 
A  1
B  4
C  3
D  1

我想用以下内容替换类别中的数字:1 = "A", 2 = "B", 3 = "C", 4 = "D".

即输出应该是

id category 
A  A
B  D
C  C
D  A

有人知道怎么做吗?

可能的解决方案:

library(tidyverse)

df %>% 
  mutate(category = LETTERS[category])

#>   id category
#> 1  A        A
#> 2  B        D
#> 3  C        C
#> 4  D        A

这里我提出三种方法来实现你的目标。

基础 R

如果您有要转换的值向量,可以使用 match 查找向量的索引以替换 category 列。

vec <- c("1" = "A", "2" = "B", "3" = "C", "4" = "D")

df$category <- vec[match(df$category, names(vec))]

dplyr

使用 case_when 语句匹配 category 中的值,并为其分配新的字符串。

library(dplyr)

df %>% mutate(category = case_when(category == 1 ~ "A",
                                   category == 2 ~ "B",
                                   category == 3 ~ "C",
                                   category == 4 ~ "D",
                                   TRUE ~ NA_character_))

left_join 来自 dplyr

或者,如果您有一个包含两列指定转换值的数据框,您可以 left_join 它们。这里,用于转换的数据框由 enframe.

创建
left_join(df, enframe(vec), by = c("category" = "name")) %>% select(-value)

输出


  id category
1  A        A
2  B        D
3  C        C
4  D        A

数据

df <- structure(list(id = c("A", "B", "C", "D"), category = c("A", 
"D", "C", "A")), row.names = c(NA, -4L), class = "data.frame")