删除3列上匹配的重复项

时间:2012-01-17 09:54:18

标签: r nlp duplicates dataframe

我有一个包含以下字段的大型数据框(示例数据)。

#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")

firstName和lastName不在原始数据中。原始数据集中的名称格式是使用自由格式输入系统生成的。它包含大量外来名称,因此数据输入员不能准确地收集名字和姓氏。我使用以下方法导出它们:

data$firstName <-sapply(strsplit(data$Name, split=" "), head, 1)
data$lastName <- sapply(strsplit(data$Name, split=" "), tail, 1)

我需要实现的是一个子集数据框,它删除在personID,Name和DOB上匹配的重复项,以便返回的值包含每个唯一案例具有最新日期的大多数条目。

也就是说,我想返回第5,7,8,10和11行。

我分隔了名字和姓氏,因为我设想通过最初提取lastName == firstName然后按日期排序的案例来起作用。然后我强硬起来,我可以使用lastName在firstName中的情况,并满足其他的意见。

没有,如果这有效,现在我迷路了。

是否有一种相对简单的方法可以删除匹配列personID,Name和DOB的重复项,保留最新的唯一案例?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我用过@Vincent的

data[ !duplicated( data$personID, fromLast=TRUE ), ]

经过排序后:

data <- ddply(.data=data, .variables= 'date')