【发布时间】:2021-03-06 11:38:54
【问题描述】:
假设我有一个已排序的向量 x 和一个包含 0/1 的 2 列的矩阵。
x <- c(5,7,9,11,15,19,22,25,28,33,36,38,45,47,49,51,53,59)
[1] 5 7 9 11 15 19 22 25 28 33 36 38 45 47 49 51 53 59
m01 <- cbind(c(1,numeric(5),1,numeric(11)), c(numeric(3),1,numeric(5),1,numeric(8)) )
[,1] [,2]
[1,] 1 0
[2,] 0 0
[3,] 0 0
[4,] 0 1
[5,] 0 0
[6,] 0 0
[7,] 1 0
[8,] 0 0
[9,] 0 0
[10,] 0 1
[11,] 0 0
[12,] 0 0
[13,] 0 0
[14,] 0 0
[15,] 0 0
[16,] 0 0
[17,] 0 0
[18,] 0 0
两列都表示向量 x 中的特定索引位置。当有1时,我想在x中找到第一次差为3的索引位置。
因此,由于m01 的第 1 列中的第一行和第 7 行是 1 和 x[1] = 5, x[7] = 22,我想在第 3 行(自 x[3] - x[1] > 3)和第 8 行获得一个取值为 1 的列。我想要与第 2 列相同。
到目前为止,我已经编写了一个函数,可以让我识别特定列的这些索引位置,但我现在不知道如何将其应用于这两个列。
find_idx <- function(n){
which(x > x[n] + 3)[1]
}
sapply(which(m01[,1] == 1), FUN = find_idx)
有人知道怎么做吗? 非常感谢!
【问题讨论】: