【发布时间】: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
这种方法虽然行得通,但似乎有点蛮力,想知道有没有比这更简单的方法。
【问题讨论】: