对于大矩阵[n,1],我想找出每一行,如果一个值小于0.1并且下一个值(在下一行中)大于0.1。
ifelse(matrix[1,1]<0.1 & matrix[2,1]>0.1, "1", "0")
ifelse(matrix[2,1]<0.1 & matrix[3,1]>0.1, "1", "0")
ifelse(matrix[3,1]<0.1 & matrix[4,1]>0.1, "1", "0")`
如何为每一行自动计算?
答案 0 :(得分:1)
这很容易被矢量化:
set.seed(6L);
N <- 10L; m <- matrix(rnorm(N,0.1,0.01),ncol=1L);
m;
## [,1]
## [1,] 0.10269606
## [2,] 0.09370015
## [3,] 0.10868660
## [4,] 0.11727196
## [5,] 0.10024188
## [6,] 0.10368025
## [7,] 0.08690796
## [8,] 0.10738622
## [9,] 0.10044873
## [10,] 0.08951603
m[-length(m)]<0.1 & m[-1L]>0.1;
## [1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
如果您想要实际的行索引:
which(m[-length(m)]<0.1 & m[-1L]>0.1);
## [1] 2 7
答案 1 :(得分:0)
请注意,您希望进行n-1次比较,并使用head()
函数提取除矩阵[,1]的最后一个元素以外的所有元素,并使用tail()
等效地获取除第一个元素外的所有元素。
ifelse(head(matrix[,1],-1)<0.1 & tail(matrix[,1],-1)>0.1, "1", "0")