簡體   English   中英

R函數返回滿足最小和最大范圍的矩陣行

[英]R function to return matrix rows that satisfy min and max ranges

具有以下矩陣:

      [,1] [,2] [,3] [,4] 
  [1,]  231   14  517  310 
  [2,]    1  154   18   21 
  [3,]  121    6  198   23 

我只想獲取2到30之間的每一行具有最小范圍的行。

每行的最小范圍:

 [1] 79
 [2]  3
 [3] 17

所以我們只得到[2]和[3]

每行的最大范圍是0到160之間:

  [1] 503
  [2] 153
  [3] 192

所以最后我們只得到滿足兩個條件的[2]。 您能否提供可以產生此結果的R語言功能?

問候,Dimitris

設置數據

m <- read.table(text="231   14  517  310
                        1  154   18   21
                      121    6  198   23")

m <- as.matrix(m)

每行最大范圍

maxr <- apply(m, 1, function(x) diff(range(x)))

每行最小范圍

minr <- apply(m, 1, function(x) min(diff(sort(x))))

將其串在一起成為行中的條件

m[minr > 2 & minr < 20 & maxr > 0 & maxr < 160, ]
#   1 154  18  21 

這是使用dist()函數的解決方案:

m <- matrix(
  c(231, 14, 517, 310, 
    1,  154,   18,   21, 
  121,    6,  198,   23 ), 3, byrow=TRUE)


mi <- apply(m, 1, function(x) min(dist(x)))
ma <- apply(m, 1, function(x) max(dist(x)))

m[mi > 2 & mi < 30 & ma > 0 & ma < 160, ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM