r - 将列值与代码向量列表匹配,并创建一个列指示它属于哪个向量

标签 r

我有一个 tibble 代码需要与另一个包含代码的向量列表相匹配。因此,在 tibble 中,将创建一个新列,指示代码属于哪个向量。

tibble:

library(tidyverse)
df <- tibble(id = 1:6, code = c("1502", "0223", "", "0380", "0421", "7958"))

> df
# A tibble: 6 x 2
     id code  
  <int> <chr> 
1     1 "1502"
2     2 "0223"
3     3 ""    
4     4 "0380"
5     5 "0421"
6     6 "7958"

代码向量列表示例:

code_list <- 
  list(
  "0" = "",
  "2" = c("0031", "0202", "0223", "0362", "0380", "0381", "03810", "03811", "03812", "03819", "0382", "0383", "03840", "03841", "03842", "03843", "03844", "03849", "0388", "0389", "0545", "449", "77181", "7907", "99591", "99592"),
  "5" = c("042", "0420", "0421", "0422", "0429", "0430", "0431", "0432", "0433", "0439", "0440", "0449", "07953", "27910", "27919", "79571", "7958","V08"),
  "12" = c("1500", "1501", "1502", "1503", "1504", "1505", "1508", "1509", "2301", "V1003"))

列 code_cat 是我要查找的结果。代码“1502”属于代码列表中的向量“12”,依此类推。如果 code_list 是数据框,我本可以使用其中一个 join 函数。但由于它是一个列表,我不确定如何进行。或者我们可以尝试将 code_list 转换为数据框。

要求的结果:

# A tibble: 6 x 3
     id code   code_cat
  <int> <chr>  <chr>   
1     1 "1502" 12      
2     2 "0223" 2       
3     3 ""     0       
4     4 "0380" 2       
5     5 "0421" 5       
6     6 "7958" 5 

最佳答案

这行吗:

library(tidyr)
library(dplyr)
library(tibble)
df %>% 
      left_join(enframe(code_list) %>% unnest(value), by = c('code' = 'value')) %>% 
      select(1,2,'code_cat' = name)
# A tibble: 6 x 3
     id code   code_cat
  <int> <chr>  <chr>   
1     1 "1502" 12      
2     2 "0223" 2       
3     3 ""     0       
4     4 "0380" 2       
5     5 "0421" 5       
6     6 "7958" 5     

关于r - 将列值与代码向量列表匹配,并创建一个列指示它属于哪个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66988502/

相关文章:

r - 自定义 xtable

R:tibble::lst 名称中不需要的引号

r - 使用 2 组数据组合连续图(R 图)

r - 在 R 中找到矩阵的相邻元素

r - 在确切日期加入 data.table 或者如果不是最近的小于日期的情况

r - 用几种不同的格式解析耗时/时间跨度/持续时间

r - 如何以适当的纵横比保存 ggplot2 图形?

rmongo 和查询

r - 如何在 r 的基函数中使用 tidyeval

r - 如何使用核心 R 操作/访问 "dist"类实例的元素?