Похоже, вы ищете дубликаты в одном векторе (genes
).Есть несколько способов сделать это.Вот некоторые примеры данных:
dat <- c(1,2,3,2,4,4,6,NA,8,NA,13)
table
будет подсчитывать количество вхождений каждого уникального значения в dat
.Заметьте, что я использую exclude = NULL
, чтобы заставить его также подсчитать NA
значений:
table(dat, exclude = NULL)
Как уже упоминалось в комментарии, duplicated
также применимо.Эта функция возвращает логический вектор, конкретно указывающий, какие записи являются дубликатами предыдущих записей.fromLast = TRUE
говорит ему смотреть спереди назад, а не спереди назад.
duplicated(dat)
duplicated(dat, fromLast = TRUE)
Вы можете объединить эти два направления, чтобы получить все дублированные элементы:
subset(dat, duplicated(dat) | duplicated(dat, fromLast = TRUE))
Если вы работаете с фреймами данных, а не с отдельными векторами, duplicated
- это, вероятно, правильный путь.
Редактировать
Воткороткий пример с использованием фрейма данных образца:
dat <- data.frame(x = c(1,2,3,4,4,5,6,5,9),
y = c(2,3,1,2,2,6,2,6,10))
> dat
x y
1 1 2
2 2 3
3 3 1
4 4 2
5 4 2
6 5 6
7 6 2
8 5 6
9 9 10
#Boolean vector of duplicated rows
duplicated(dat)
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE
#Indices of duplicated rows
which(duplicated(dat))
[1] 5 8
#Look in both directions to get all dups (indices)
which(duplicated(dat) | duplicated(dat,fromLast = TRUE))
[1] 4 5 6 8
#The actual rows
subset(dat,duplicated(dat) | duplicated(dat, fromLast = TRUE))
x y
4 4 2
5 4 2
6 5 6
8 5 6