2016-04-19 52 views
0

,我希望找出每一行,如果一個值小於0.1,並且下一個值(在下一行)更大0.1。R:對於大矩陣[n,1],每行對矩陣中的每行都進行自動化的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和矩陣[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

非常感謝你,代碼正在工作。 –