R函数返回满足最小范围的矩阵行

  • 本文关键字:最小范围 函数 返回 满足 r
  • 更新时间 :
  • 英文 :


具有以下矩阵:

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

我只想获得每行最小范围的行 和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, ]

最新更新