2016-04-19 2 views
0

для большой матрицы [n, 1], я хочу узнать для каждой строки, если значение меньше 0,1, и если следующее значение (в следующей строке) больше 0,1.R: Автоматический расчет ifelse в матрице для каждой строки

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

Да, я пробовал раньше, но это мой первый цикл, и я не знаю, как писать в этом случае. для (i в матрице) { + ifelse (матрица [i, 1] <0,1 & matrix [i + 1,1]> 0,1, "1", "0")} –

ответ

0

Это легко векторизации:

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 
+0

Большое спасибо, код работает , –

0

Обратите внимание, что вы хотите хотите сделать N-1 сравнений, а также использовать функцию head() для извлечь все, кроме последнего элемента матрицы [, 1], и сделать эквивалентно с tail(), чтобы получить все, кроме первого элемента.

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

+0

Большое спасибо, код работает. –

Смежные вопросы