2016-10-10 4 views
-1

У меня data.frame с этими данными и 10 колонокКак использовать два условия для дублирования?

ID | sequence | modification| ... | nºproject 
DAT | atggggg | NULL  | ... | project 
DAT | atggggg | 7.UN  | ... | project 
DAT | actgat | NULL  | ... | project 
DAT | atgtagtt | NULL  | ... | project 
DAT | ttttaaat | 8.UN  | ... | project 
DAT | tatatccc | NULL  | ... | project 
DAT | atagattg | 9.AT  | ... | project 
DAT | atatagag | NULL  | ... | project 
DAT | gggatgac | NULL  | ... | project 

Я использую эти коды для поиска дубликатов.

data_table <- data.table(new_data_frame_PEP$sequence, new_data_frame_PEP$modifications) 
colnames(data_table) <- c("sequence","modifications") 

data_duplicate <- data_table[sequence %in% data_table[duplicated(data_table$sequence),]$sequence] 

Однако проблема заключается в том, что у меня есть несколько повторяющихся последовательностей, но с различными модификациями. Например, в примере:

DAT | atggggg | NULL  | ... | project 
DAT | atggggg | 7.UN  | ... | project 

Есть ли способ использовать два условие в дубликате функции, используя столбец «последовательность» и столбец «модификация»?

ответ

1

Если new_data_frame_PEP является фрейм данных, и вы хотите, чтобы получить строки, которые имеют дубликаты в sequence, вы можете вместо использование:

res <- new_data_frame_PEP[duplicated(new_data_frame_PEP$sequence) | 
          duplicated(new_data_frame_PEP$sequence, fromLast=TRUE),] 

Здесь мы называем duplicated дважды: первый с самого начала из sequence до конца, а затем от конца до начала, используя fromLast. duplicated возвращает логический элемент, который равен (то есть |), чтобы получить все индексы строк, которые имеют дубликаты. Затем мы подмножаем строки new_data_frame_PEP относительно них.

Чтобы сделать то же самое с более чем одной колонки, так что мы находим все строки, которые дублированные значения в обоих sequence и modification столбцов, мы должны выбрать те столбцы, чтобы перейти к duplicated. Это может быть сделано с помощью subset:

seq.mod <- subset(new_data_frame_PEP, select=c("sequence","modification")) 
data_duplicate <- new_data_frame_PEP[duplicated(seq.mod) | duplicated(seq.mod, fromLast=TRUE),] 

Для иллюстрации мы создаем набор данных, который является тем, что вы вывесили за исключением мы включаем только ID, sequence, modification и n_project колонны. Кроме того, мы дублируем первую строку, так что мы на самом деле есть дубликаты в обоих sequence и modification:

new_data_frame_PEP <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "DAT ", class = "factor"), sequence = structure(c(4L, 
4L, 4L, 1L, 5L, 8L, 7L, 2L, 3L, 6L), .Label = c(" actgat ", 
" atagattg ", " atatagag ", " atggggg ", " atgtagtt ", " gggatgac ", 
" tatatccc ", " ttttaaat "), class = "factor"), modification = structure(c(4L, 
4L, 1L, 4L, 4L, 2L, 4L, 3L, 4L, 4L), .Label = c(" 7.UN ", " 8.UN ", 
" 9.AT ", " NULL "), class = "factor"), n_project = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = " project ", class = "factor")), .Names = c("ID", 
"sequence", "modification", "n_project"), class = "data.frame", row.names = c(NA, 
-10L)) 
## ID sequence modification n_project 
##1 DAT atggggg   NULL project 
##2 DAT atggggg   NULL project 
##3 DAT atggggg   7.UN project 
##4 DAT actgat   NULL project 
##5 DAT atgtagtt  NULL project 
##6 DAT ttttaaat  8.UN project 
##7 DAT tatatccc  NULL project 
##8 DAT atagattg  9.AT project 
##9 DAT atatagag  NULL project 
##10 DAT gggatgac  NULL project 

Использование только sequence, получим:

seq.only <- subset(new_data_frame_PEP, select=c("sequence")) 
data_duplicate <- new_data_frame_PEP[duplicated(seq.only) | duplicated(seq.only, fromLast=TRUE),] 
## ID sequence modification n_project 
##1 DAT atggggg   NULL project 
##2 DAT atggggg   NULL project 
##3 DAT atggggg   7.UN project 

Используя оба sequence и modification:

seq.mod <- subset(new_data_frame_PEP, select=c("sequence","modification")) 
data_duplicate <- new_data_frame_PEP[duplicated(seq.mod) | duplicated(seq.mod, fromLast=TRUE),] 
## ID sequence modification n_project 
##1 DAT atggggg   NULL project 
##2 DAT atggggg   NULL project 
+0

Да !, Это работает !!!. Благодарю youuu – Enrique

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