2016-10-10 18 views
-1

私は重複を見つけるために、このコードを使用してきたこのデータと10列重複機能で2つの条件を使用するにはどうすればよいですか?

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.frameを持っています。

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 

は、カラム「配列」とカラム「修正」を使用して重複した機能に2つの条件を使用する方法はありますか?

答えて

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を呼び出す:最初のスタートからfromLastを使用して末尾からsequence列まで、最後から最後まで先頭に戻ります。 duplicatedは、or'ed(すなわち、|)の論理を返し、重複しているすべての行インデックスを取得します。次に、これらの行についてサブセットnew_data_frame_PEPをサブセット化します。

我々は両方sequencemodification列の値を重複しているすべての行を見つけるように、複数のカラムで同じことを達成するために、我々は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),] 

説明するために、我々はあなたが我々が唯一IDsequencemodification、そしてn_project列を含める以外掲示するものであるデータセットを作成します。私たちは実際にsequencemodificationの両方に重複を持つように加えて、我々は最初の行を複製:

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を使用して、我々が得る:

両方sequencemodification使用
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 

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

はい!、それは動作します!!!。ありがとう – Enrique

関連する問題