我正在尝试获取具有一些优先级的向量中元素的名称。
如果有任何元素的值为"integer"
,则获取第一个此类元素的名称(在下面的示例中,year
(
但是如果没有值"integer"
的元素,则对任何值为"numeric"
的元素执行相同的操作。
我尝试了以下方法但没有成功(这是一个玩具示例,感谢功能答案(:
cl <- c(group = "character", degree = "numeric", year = "integer", zoo = "integer")
names(cl[cl == "integer" || cl == "numeric"])[1]
desired.output = "year"
你很接近,但到目前为止,你的方法有两个问题:
||
运算符只处理一个元素;因为您要查看多个元素,所以您希望|
。有关更多详细信息,请参阅?`||`
。- 您的方法将平等对待"整数"和"数字",而不是像您希望的那样优先考虑数字。
一种方法是:
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"
或转换为指定levels
factor
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"