簡體   English   中英

如何在R中的數據幀的2D矩陣中找到重復的值/數據點及其索引?

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

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