![](/img/trans.png)
[英]Given a 2D numeric "height map" matrix in R, how can I find all local maxima?
[英]How can I find repeated values/ data points and their index in 2D matrix of a dataframe in R?
例如,假設我有矩陣A
x y z f
1 1 2 A 1005
2 2 4 B 1002
3 3 2 B 1001
4 4 8 C 1001
5 5 10 D 1004
6 6 12 D 1004
7 7 11 E 1005
8 8 14 E 1003
從這個矩陣中,我想找到重復的值,例如1001、1005,D,2(在第三列中),我還想找到它們的索引(哪一行或哪一個位置)。
我是R的新手! 顯然,可以使用for循環逐個元素地進行簡單搜索,但是我想知道,R中是否有針對此類問題的函數。
此外,我嘗試使用重復的和唯一的,這兩個函數都為我提供了重復的行號或列號,它們還為我提供了重復的行數,但是我無法使用這兩個函數來搜索整個矩陣!
您可以編寫一個相當簡單的函數來獲取此信息。 但是請注意,此解決方案適用於matrix
。 它不適用於data.frame
。 使用data.frame
數據結構是列表的子集這一事實,可以為data.frame
編寫類似的函數。
# example data
set.seed(234)
m <- matrix(sample(1:10, size=100, replace=T), 10)
find_matches <- function(mat, value) {
nr <- nrow(mat)
val_match <- which(mat == value)
out <- matrix(NA, nrow= length(val_match), ncol= 2)
out[,2] <- floor(val_match / nr) + 1
out[,1] <- val_match %% nr
return(out)
}
R> m
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 8 6 6 7 6 7 4 10 6 9
[2,] 8 6 6 3 10 4 5 4 6 9
[3,] 1 6 9 2 9 2 3 6 4 2
[4,] 8 6 7 8 3 9 9 4 9 2
[5,] 1 1 5 6 7 1 5 1 10 6
[6,] 7 5 4 7 8 2 4 4 7 10
[7,] 10 4 7 8 3 1 8 6 3 4
[8,] 8 8 2 2 7 5 6 4 10 4
[9,] 10 2 9 6 6 9 7 2 4 7
[10,] 3 9 9 4 2 7 7 2 9 6
R> find_matches(m, 8)
[,1] [,2]
[1,] 1 1
[2,] 2 1
[3,] 4 1
[4,] 8 1
[5,] 8 2
[6,] 4 4
[7,] 7 4
[8,] 6 5
[9,] 7 7
在此功能中,行索引在列1中輸出,列索引在列2中輸出
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.