R:每行的矩阵自动ifelse计算

时间:2016-04-19 09:52:06

标签: r if-statement matrix

对于大矩阵[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")`

如何为每一行自动计算?

2 个答案:

答案 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")