R语言 使用基于键的名称替换向量中的唯一值

bvjveswy  于 2023-03-05  发布在  其他
关注(0)|答案(3)|浏览(124)

我有一个包含几个唯一值的向量:

codes <- c(122, 108, 122, 202, 122, 113, 122, 108)

这些值中的每个值都对应于特定树种的名称:122 -黄松,108 -黑松,113 -柔软,202 -道格拉斯,
我将上述键设置为 Dataframe :

key <- data.frame(code = c(108, 113, 122, 202), name = c('lodgepole', 'limber', 
                      'ponderosa', 'Douglas fir'))

我想使用键将'codes'向量中的值更改为相应的树种名称。如何在不使用嵌套ifelse()语句的情况下执行此操作?
我已经研究了dplyr中的各种mutate函数来实现这一点,但似乎找不到解决方案。

xeufq47z

xeufq47z1#

另一个dplyr

recode(codes, !!!deframe(key))

[1] "ponderosa"   "lodgepole"   "ponderosa"   "Douglas fir" "ponderosa"  
[6] "limber"      "ponderosa"   "lodgepole"
0yg35tkg

0yg35tkg2#

既然您提到了dplyr,下面介绍使用summarize的方法

library(dplyr)

tibble(codes) %>% 
  rowwise() %>% 
  summarize(name = key$name[which(codes == key$code)])
# A tibble: 8 × 1
  name       
  <chr>      
1 ponderosa  
2 lodgepole  
3 ponderosa  
4 Douglas fir
5 ponderosa  
6 limber     
7 ponderosa  
8 lodgepole
f8rj6qna

f8rj6qna3#

使用base R

unname(with(key, setNames(name, code))[as.character(codes)])
  • 输出
[1] "ponderosa"   "lodgepole"   "ponderosa"   "Douglas fir" 
[5] "ponderosa"   "limber"      "ponderosa"   "lodgepole"

或使用tidyverse

library(dplyr)
library(tibble)
key %>%
   reframe(name = deframe(pick(everything()))[as.character(codes)])
  • 输出
name
1   ponderosa
2   lodgepole
3   ponderosa
4 Douglas fir
5   ponderosa
6      limber
7   ponderosa
8   lodgepole

或使用

deframe(key)[paste(codes)]

相关问题