有没有一种方法可以在R中的命名向量中选择一系列元素



有没有办法从R中的命名向量中选择一个范围而不是特定的元素?

vec<-c(1, 2, 3, 4, 5 )
names(vec)<-c('Jan', 'Feb', 'Mar', 'April', 'May')
vec['Jan']
#Something along these lines?
vec['Jan':'Feb']

我们可以使用base R中的match:,根据向量的names从开始到结束得到索引的序列,并将vec子集

vec[match('Jan', names(vec)):match("April", names(vec))]
#   Jan   Feb   Mar April 
#   1     2     3     4 

使用dplyr的解决方案。

library(dplyr)
unlist(data.frame(t(vec)) %>% select(Jan:April), use.names = TRUE)
# Jan   Feb   Mar April 
# 1     2     3     4 

也许这个:

#Option 1
vec[names(vec) %in% c('Jan','Feb')]

输出:

Jan Feb 
1   2 

或者这个:

#Index
initial <- 'Jan'
last <- 'Feb'
i1 <- which(names(vec)==initial)
i2 <- which(names(vec)==last)
#Option 2
vec[i1:i2]

输出:

Jan Feb 
1   2 

还有一些测试:

#Test
initial <- 'Jan'
last <- 'April'
i1 <- which(names(vec)==initial)
i2 <- which(names(vec)==last)
#Option 2
vec[i1:i2]

输出:

Jan   Feb   Mar April 
1     2     3     4 

您必须定义initiallast才能设置范围。

最新更新