我有一个 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/