如何用另一个值替换列中的所有值?
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")
假设我有一个包含两列的数据框 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")