2017-05-23 24 views
0

私は現在重複した水の権利を見ている大きなデータセットで作業しています。各権利保有者にはRightIDが割り当てられていますが、一部は事務目的で2回記録されています。しかし、いくつかの権利IDは複数回リストされ、私の最終目標との関連性があります。 1つの例:メタル・タグ番号が特定の水の権利に割り当てられている場合は、二重入力があります。重要な情報を重複してカウントするのを避けるため、私は観測を削除する必要があります。私はこの時点で書かれているR(20K観測)の重複を条件付きで削除

#Updated Metal Tag Number 
for(i in 1:nrow(duplicate.rights)) { 
    if([i, "RightID"]==[i-1, "RightID"] & [i,"MetalTagNu"]=![i-1, "MetalTagNu"]){ 
    remove(i) 
    } 
    print[i] 
} 

元のデータフレームが同様に設定されている:

RightID Source  Use   MetalTagNu 
1-0000  Wolf Creek Irrigation N/A 
1-0000  Wolf Creek Irrigation 12345 
1-0001  Bear River Domestic  N/A 
1-0002  Beaver Stream Domestic  00001 
1-0002  Beaver Stream Irrigation 00001 

例えば権利者1-0002は、彼が2つの異なる目的のために彼の水を正しく使用しているので、保持する必要があります。ただし、権利者1-0000は不要です。

右の所有者1-0000私は排除する必要がありますが、右の所有者1-0002は私の最終目標にとって貴重です。また、1つのrightIDに対して最大10個のエントリがあることに注意してください。ただし、10個のうち1個だけが不要な重複です。また、複製と元のエントリは、データセット内で互いに隣り合うことはありません。

私は非常に初心者ですので、私の貧しい以前の試みを許してください。私はl apply機能を使用して、これをより迅速かつ効率的に行うことができることを知っています。そこにはどんな指導も大変ありがとうございます。

+0

データフレーム – rgunning

+2

の削除を示す最小限の作業例をここに回答してください...[https://stackoverflow.com/questions/13967063/remove-duplicated-rows](https://stackoverflow.com/questions/13967063/remove-duplicated-rows) –

答えて

0

だから私は次のことを示唆している:

1)あなたは(金属タグ番号)を右特定の水に割り当てられていたいくつかの重複を維持したいと言います。私はこれが何を意味するのか分からない。しかし、私はそれがこのようなものだと仮定します。金属タグ番号= 1の場合、重複があってもそれらを保持したいと思います。だから私は、あなたのデータにこれらの行を取ることを提案して(のはこのdataを呼びましょう):

deduped_data = data_to_dedupe[!duplicated(data_to_dedupe$dedupe_key), ] 

data_to_keep <- data[data$metal_tag_number == 1, ] 
data_to_dedupe <- data[data$metal_tag_number != 1, ]  

2)今、あなたは2データフレームを持っていることを、あなたは問題なくデータフレームdata_to_dedupeを重複排除することができます

3)今、あなたは戻って一緒に2つのデータフレームをマージすることができます

final_data <- rbind(data_to_keep, deduped_data) 

を、これはあなたがしてください欲しかったものである場合にはマークアップと答えが正しいことを示唆しています。ありがとう!

0

新しい列を作成します。これは、RightID &の組み合わせです。

のdf $キー<、あなたのデータフレームがDFと呼ばれていると仮定 - ペースト(DF $ RightID、DF $使用)

は、このコマンドを使用して、重複削除、そして、: - DF

DF1 <を[!duplicated(df [、1]、)]

df1には重複がありません。

関連する問題