[英]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.