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