具有以下矩阵:
[,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, ]