次のフィールド(例のデータ)を持つ大きなデータフレームがあります。3列に一致する重複を削除します
#dput(data) gives...
data <- structure(list(idNum = 1:11, personID = c(111L, 112L, 113L, 113L, 111L, 112L, 114L, 112L, 111L, 113L, 115L), Name = c("PETER PAN", "RUPERT BEAR", "LONG JOHN SILVER", "SILVER LONG JOHN", "PAN PETER", "BEAR RUPERT", "R BEAR", "RUPERT BEAR", "PETER PAN", "LONG J SILVER", "LJ SILVER "), DOB = c("1/01/2001", "2/01/2001", "3/01/2001", "3/01/2001", "1/01/2001", "2/01/2001", "10/01/2001", "2/01/2001", "1/01/2001", "1/01/2001", "5/01/2001"), date = c("12/01/2012", "12/01/2012", "14/01/2012", "12/01/2012", "14/01/2012", "11/01/2012", "10/01/2012", "16/01/2012", "10/01/2012", "16/01/2012", "10/01/2012" ), colour = c("RED", "BLUE", "RED", "GREEN", "YELLOW", "BLUE", "RED", "BLUE", "ORGANGE", "BLUE", "ORANGE"), firstName = c("PETER", "RUPERT", "LONG", "SILVER", "PAN", "BEAR", "R", "RUPERT", "PETER", "LONG", "LJ"), lastName = c("PAN", "BEAR", "SILVER", "JOHN", "PETER", "RUPERT", "BEAR", "BEAR", "PAN", "SILVER", "SILVER")), .Names = c("idNum", "personID", "Name", "DOB", "date", "colour", "firstName", "lastName" ), row.names = c(NA, -11L), class = "data.frame")
姓と名は、元のデータに含まれていません。元のデータセットの名前形式は、フリーフォーマットの入力システムで生成されます。これには多数の外国語名が含まれているため、データ入力担当者は名と姓を正確に収集しません。私が使用してそれらを派生:
data$firstName <-sapply(strsplit(data$Name, split=" "), head, 1)
data$lastName <- sapply(strsplit(data$Name, split=" "), tail, 1)
を私は達成するために必要なものPERSONIDにマッチした、重複を除去したサブセットデータフレームで、値が返されるように名前とDOBが、それぞれ独自のケースのための最新の日付の最もエントリが含まれています。ある
は、私は、行5、7、8、10、私はそれがlastName == firstName
次いでによってオーデイング最初に抽出場合によって機能するであろうことが想定ので、私はファーストネームとラストネームを分離11.
を返したいです日付。私はラストネームがファーストネームで、他のコンフェッションが満たされたケースを使うことができたのが難しいです。
これがうまくいけば、今私は迷っています。
personID、NameおよびDOBの列に一致する重複を削除するのは比較的簡単な方法がありますか?
事前に感謝します。
によって並べ替えた後、私はヴィンセントのdata[ !duplicated(data$personID, fromLast=TRUE), ]
@使用
http://stackoverflow.com/questions/5963269/how-to-make-aを参照してください。データから再現可能なサンプルを作成する方法については、-great-r-reproducible-exampleを参照してください。そのデータフレームを再構築するコードをコピーして貼り付けることができるようにしてください。 –
Oops @Joris Meys、dput()で修正されました。 – John
2つの非常に異なる問題があります。 難しいのは、2人の人物の名前が同じであることを特定することです。スペルミス、略語、任意のファーストネーム/ラストネーム/ミドルネームのオーダーがある可能性があります。簡単なのは、personID列が修正された後、日付列に沿ってデータをソートするだけです。最後の値は次のとおりです。 'data [!duplicated(data $ personID、fromLast = TRUE) 、]。 –