2016-04-19 2 views
0

pour une grande matrice [n, 1], je veux savoir pour chaque ligne, si une valeur est plus petite 0,1 et si la valeur suivante (dans la ligne suivante) est plus grand 0.1.R: Automatique ifelse calcul dans la matrice pour chaque ligne

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")` 

Comment puis-je automatiser ce calcul pour chaque ligne?

+0

Oui, je l'ai essayé avant, mais il est ma première boucle et je ne sais pas comment l'écrire dans ce cas. pour (i dans la matrice) { + ifelse (matrice [i, 1] <0.1 & matrice [i + 1,1]> 0.1, "1", "0")} –

Répondre

0

Ceci est facilement vectorisé:

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 

Si vous voulez que les indices de ligne réels:

which(m[-length(m)]<0.1 & m[-1L]>0.1); 
## [1] 2 7 
+0

Merci beaucoup, le code fonctionne . –

0

Notez que vous voulez vouloir faire des comparaisons n-1, et utiliser la fonction head() à extraire tout sauf le dernier élément de la matrice [, 1], et faire de manière équivalente avec tail() pour obtenir tout sauf le premier élément.

ifelse(head(matrix[,1],-1)<0.1 & tail(matrix[,1],-1)>0.1, "1", "0")

+0

Merci beaucoup, le code fonctionne. –