Я пытаюсь сопоставить людей, когда у них одинаковые имена, фамилии и имена, и сохраняю наименьшее числовое значение для идентификаторов.
Я создал тестовую базу данных ниже (намного меньше, чеммой фактический набор данных) и написал вложенный цикл for, который выглядит так, как будто он делает то, что должен.
Но на больших наборах данных он чертовски медленный.
I 'Я относительно новичок в применении функций, но они кажутся более интуитивными для применения функций, чем обработка данных.
Какая более эффективная альтернатива тому, что я здесь делаю?Я уверен, что есть простое решение, которое заставит меня покачать головой, чтобы спросить здесь, но я не подхожу к нему.
dta.test<- NULL
dta.test$Person_id <- c(1,2,3,4,5,6,7,8,9,10, 11)
dta.test$FirstName <- c("John", "James", "John", "Alex", "Alexander", "Jonathan", "John", "Alex", "James", "John", "John")
dta.test$LastName <- c("Smith", "Jones", "Jones", "Jones", "Jones", "Smith", "Jones", "Smith", "Johnson", "Smith", "Smith")
dta.test$DOB <- c("2001-01-01", "2002-01-01", "2003-01-01", "2004-01-01", "2004-01-01", "2001-01-01", "2003-01-01", "2006-01-01", "2006-01-01", "2001-01-01", "2009-01-01")
dta.test$Actual_ID <- c(1, 2, 3, 4, 5, 6, 3, 8, 9, 1, 11)
dta.test <- as.data.frame(dta.test)
for(i in unique(dta.test$FirstName))
for(j in unique(dta.test$LastName))
for (k in unique (dta.test$DOB))
{
{
{
dta.test$Person_id[dta.test$FirstName==i & dta.test$LastName==j & dta.test$DOB==k] <- min(dta.test$Person_id[dta.test$FirstName==i & dta.test$LastName==j & dta.test$DOB==k], na.rm=T)
}
}
}