在 R 中有条件地提取向量名称



我正在尝试获取具有一些优先级的向量中元素的名称。

如果有任何元素的值为"integer",则获取第一个此类元素的名称(在下面的示例中,year(

但是如果没有值"integer"的元素,则对任何值为"numeric"的元素执行相同的操作。

我尝试了以下方法但没有成功(这是一个玩具示例,感谢功能答案(:

cl <- c(group = "character", degree = "numeric", year = "integer", zoo = "integer")
names(cl[cl == "integer" || cl == "numeric"])[1]
desired.output = "year"

你很接近,但到目前为止,你的方法有两个问题:

  1. ||运算符只处理一个元素;因为您要查看多个元素,所以您希望|。有关更多详细信息,请参阅?`||`
  2. 您的方法将平等对待"整数"和"数字",而不是像您希望的那样优先考虑数字。

一种方法是:

Coalesce2 <- function(x, y) if(is.na(x))  y  else  x
Coalesce2(cl[cl == "integer"][1], cl[cl == "numeric"][1])

铌。我在这里制作一个新的合并函数而不是使用 dplyr 的唯一原因是它不会以我认为您想要的方式保留名称。

由于它是固定匹配,因此我们可以使用%in%

names(sort(cl[cl %in% c('integer', 'numeric')]))[1]
#[1] "year"

或转换为指定levelsfactor

names(sort(factor(cl, c('integer', 'numeric'))))[1]
#[1] "year"

或与match

names(cl)[na.omit(match(c('integer', 'numeric'), cl))[1]]
#[1] "year"

使用grep.

names(sort(cl[grep("integer|numeric", cl)])[1])
# [1] "year"

最新更新