如何在R中提取部分命名向量的名称(无名称时取对应值)?
解决方案
Base R 方法
可以利用ifelse()结合names()函数实现需求:
my_vec <- c('one', 'two' = '2', 'three' = '3') # 生成目标向量 result <- ifelse(is.na(names(my_vec)), my_vec, names(my_vec)) # 输出结果 result #> [1] "one" "two" "three"
原理:names(my_vec)返回向量的名称向量,未命名元素的对应位置为NA;通过ifelse()判断每个位置的名称是否为NA,是则取向量对应位置的值,否则取名称。
Tidyverse 方法
使用purrr包的imap_chr()函数(可同时遍历向量元素与对应名称):
library(purrr) my_vec <- c('one', 'two' = '2', 'three' = '3') # 生成目标向量 result <- imap_chr(my_vec, ~ if(is.na(.y)) .x else .y) # 输出结果 result #> [1] "one" "two" "three"
其中.x代表向量的每个元素值,.y代表对应元素的名称,逻辑与Base R方法一致,通过判断名称是否为NA选择返回值或名称。
内容的提问来源于stack exchange,提问作者JRR
相关产品推荐
相关产品推荐

