2016-02-23 2 views
0

Например предположим, у меня есть матрицу AКак найти повторяющиеся значения/точки данных и их индекс в 2D-матрице кадра данных в R?

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 для этой проблемы.

Кроме того, я попытался использовать дублирующиеся и уникальные, обе функции дают мне дублированный номер строки или номер столбца, они также дают мне, сколько из них было повторено, но я не могу найти целую матрицу, используя обе из них !

+1

Показать код, который вы на самом деле пытались таким образом мы можем помочь вам с ним. Кроме того, похоже, что у вас есть data.frame, а не матрица, нет? Проверьте с помощью 'class (A)'. – MrFlick

+0

Спасибо за ваш ответ. сначала я попытался с фреймом данных, не смог разобрать его, а затем преобразовал a в матрицу, используя as.matrix Код, я попробовал > duplicated (A) > FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > x [duplicated (x) ] > кадр данных с 0 столбцами и 8 строками Но если я использую один столбец или матрицу, он может обнаружить, что, но не перед целым набором данных или матрицей Тогда я попробовал это уникальный (A [дублированный (A), ]) –

+2

Вы не можете иметь смешанные типы данных в матрице, чтобы преобразовать все эти значения в символы? Это непонятно. Вы должны сделать свой пример более [воспроизводимым] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) и четко указать желаемый результат для ваших данных образца. Что именно вы хотите вернуть сюда? Какой тип объекта? – MrFlick

ответ

0

Вы можете написать довольно простую функцию для получения этой информации. Обратите внимание, что это решение работает с 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

Смежные вопросы