【问题标题】:generating index values of a vector in R在 R 中生成向量的索引值
【发布时间】:2020-10-28 01:42:48
【问题描述】:

我有一个可以是任意长度的向量。例如

my_vec <- c(179, 192, 230, 243, 264, 276)

我生成另一个向量,它基本上是一个从 0 到 N 的索引。这个向量的长度等于min(my_vec):max(my_vec) 之间的长度,如下所示:

dat <- data.frame(my_vec = min(my_vec):max(my_vec),
                  index_vec = seq_along(min(my_vec):max(my_vec)) - 1)

所以 179 的索引是 0,180 的索引是 1,181 的索引是 2....276 的索引是 97 等等。

我想创建两个向量:一个开始和结束,它为my_vec 中的每个元素显示开始索引和结束索引。 例如,179 & 192、193 & 230、231 & 243、244 & 264、265 & 276 的索引是什么。我有以下代码。

end_vec <- rep(NA, length(my_vec) - 1)
  
for(i in 2:length(my_vec)){
 
    temp <- dat[which.max(dat$my_vec >= my_vec[i]), ]       
    end_vec[i] <- temp$index_vec
}


end_vec <- na.omit(end_vec)

start_vec <- end_vec[-length(end_vec)] + 1
start_vec <- c(0, start_vec)
start_vec
# 0 14 52 65 86
end_vec
# 13 51 64 85 97

这种方法虽然行得通,但似乎有点蛮力,想知道有没有比这更简单的方法。

【问题讨论】:

    标签: r vector indexing


    【解决方案1】:

    你可以使用match

    end_vec <- dat$index_vec[match(my_vec, dat$my_vec)]
    end_vec <- end_vec[-1]
    start_vec <- c(0, end_vec[-length(end_vec)] + 1)
    start_vec
    #[1]  0 14 52 65 86
    end_vec
    #[1] 13 51 64 85 97
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2015-07-11
      相关资源
      最近更新 更多