R 基于命名向量替换列值

R 基于命名向量替换列值,r,tidyverse,R,Tidyverse,考虑以下命名向量vec和tibbledf: vec <- c("1" = "a", "2" = "b", "3" = "c") df <- tibble(col = rep(1:3, c(4, 2, 5))) df # # A tibble: 11 x 1 # col # <int> # 1 1 # 2 1 # 3

考虑以下命名向量
vec
和tibble
df

vec <- c("1" = "a", "2" = "b", "3" = "c")
df <- tibble(col = rep(1:3, c(4, 2, 5)))

df
# # A tibble: 11 x 1
#      col
#    <int>
#  1     1
#  2     1
#  3     1
#  4     1
#  5     2
#  6     2
#  7     3
#  8     3
#  9     3
# 10     3
# 11     3
预期产出:

# A tibble: 11 x 1
   col    
   <chr>
 1 a    
 2 a    
 3 a    
 4 a    
 5 b    
 6 b    
 7 c    
 8 c    
 9 c    
10 c    
11 c  
#一个tible:11 x 1
上校
1A
2A
3A
4A
5 b
6b
7 c
8 c
9 c
10摄氏度
11 c

您可以使用
col

df$col1 <- vec[as.character(df$col)]

我们也可以使用
data.table

library(data.table)
setDT(df)[, col1 := vec[as.character(col)]]

我正在寻找一种可以在管道链中使用的tidyverse兼容方法。添加了一个在管道中使用该方法的选项@Junitar
df%>%mutate(col=str\u replace\u all(col,vec))
应该完成这项工作。
library(dplyr)
df %>% mutate(col1 = vec[as.character(col)])
#   col col1 
#   <int> <chr>
# 1     1 a    
# 2     1 a    
# 3     1 a    
# 4     1 a    
# 5     2 b    
# 6     2 b    
# 7     3 c    
# 8     3 c    
# 9     3 c    
#10     3 c    
#11     3 c    
library(data.table)
setDT(df)[, col1 := vec[as.character(col)]]