2017-12-29 3 views
-2

여러 열을 기반으로하는 데이터 세트에서 중복 레코드를 확인하고 레코드를 검토 한 후 R에서 가장 완전한 데이터로 유지하십시오. 데이터 포인트의 최대 수가 채워지는 각 이름과 연관된 행 (들). 날짜 열의 경우 잘못된 날짜를 누락으로 처리하고 싶습니다. 내 데이터는 다음과 같습니다레코드를 식별, 검토 및 중복 제거 R

df<-data.frame(Record=c(1,2,3,4,5), 
      First=c("Ed","Sue","Ed","Sue","Ed"), 
      Last=c("Bee","Cord","Bee","Cord","Bee"), 
      Address=c(123,NA,NA,456,789), 
      DOB=c("12/6/1995","0056/12/5",NA,"12/5/1956","10/4/1980")) 

Record First Last Address DOB 
1  Ed Bee 123  12/6/1995 
2  Sue Cord   0056/12/5 
3  Ed Bee      
4  Sue Cord 456  12/5/1956 
5  Ed Bee 789  10/4/1980 

그래서이 경우에는 내가 기록 (1), (4)를 유지하는 것, 그리고 (5)이 약 85000 개 기록과 130 개 변수가있다, 그래서 체계적으로 할 수있는 방법이 있다면, 나 ' D는 도움을 인정한다. 또한, 나는 총 R 초보자 (당신이 말할 수없는 것처럼), 그래서 어떤 설명도 감사합니다. 감사!

+0

레코드 1,4,5를 유지하는 기준을 설명 할 수 있습니까? – PoGibas

+0

물론입니다. 기록 1, 4 및 5에는 주소에 대한 데이터와 DOB (생년월일)에 대한 올바른 형식이 있습니다. – GirlL

+0

'DOB '의 올바른 형식은 무엇입니까? – PoGibas

답변

0
#Add a new column to the dataframe containing the number of NA values in each row. 

df$nMissing <- apply(df,MARGIN=1,FUN=function(x) {return(length(x[which(is.na(x))]))}) 

#Using ave, find the indices of the rows for each name with min nMissing 
#value and use them to filter your data 

deduped_df <- 
df[which(df$nMissing==ave(df$nMissing,paste(df$First,df$Last),FUN=min)),] 

#If you like, remove the nMissinig column 
df$nMissing<-deduped_df$nMissing<-NULL 


deduped_df 
Record First Last Address  DOB 
1  1 Ed Bee  123 12/6/1995 
4  4 Sue Cord  456 12/5/1956 
5  5 Ed Bee  789 10/4/1980 

편집 : 당신은 또한 유효 DOBs 필터링하려는 경우 귀하의 코멘트 당, 자동 (데이터 누락) NA로 잘못된 날짜를 취급합니다 날짜 형식에 열을 변환하여 시작할 수 있습니다.

df$DOB<-as.Date(df$DOB,format="%m/%d/%Y") 
+0

고마워요! NA 값의 수를 세는 첫 번째 단계에서 NA를 끝까지 나열하는 열 'X'를 작성했습니다. 내가 당신의 코드에서 변수 이름을 채워야했기 때문에 그것이라고 생각할 것입니다. 그 맞습니까? – GirlL

+0

또한 잘 작동하는 두 번째 단계 (감사합니다!)에서 중복 된 데이터 만 볼 수 있습니다. 중복 기록을 검토하려면 어떻게해야합니까? – GirlL

+0

DOB 열을 잘 작동하는 것으로 보이는 날짜 형식으로 변환하는 3 단계 후에도 다음 코드로 나이를 추출하려고 시도했습니다. "age <- floor (age_calc (dob = doB = endobate = Sys. "** 그러나 ** 다음 오류가 발생했습니다 :"(임의의 (enddate GirlL