
Prezados, preciso trabalhar com os pares resultantes do RecordLinkage e não sei como fazer. Enviei email para o autor do pacote, mas ele disse que terei que programar, pois não existe uma maneira automática de fazer isso. Bem, aí vai, meu desafio: Tenho dois bancos ( um retirado do outro) e vou fazer o linkage para obter as readmissões. No resultado sempre haverá um par de cada um, com mesma data de internação, já que o banco menor é retirado do maior (o menor é de internados por fratura de fêmur e o maior é de internados por todas as causas). Aí vai um exemplo criado para você verem como é a saída dos pares: nome=c("Ricardo","Maria","Tereza","Pedro","José", "Germano") sobrenome=c("Cunha","Andrade","Silva","Soares","Silva","Lima") idade=c(67,89,78,65,68,67) ano=c(1945,1923,1934,1947,1944,1945) dataint=c(20120907,20120703,20120301,20120805,20121004,20121209) banco1=cbind(nome,sobrenome,idade,ano,dataint) banco1=data.frame(banco1) banco1 nome=c("Maria","Lúcia","Paulo","Marcos", "Ricardo", "Germanio") sobrenome=c("Andrade","Silva","Soares","Pereira","Cunha","Lima") idade=c(67,88,78,60,68,80) ano=c(1945,1924,1934,1952,1944,1932) dataint=c(20121208,20121103,20120302,20120105,20121004,20121209) banco2=cbind(nome,sobrenome,idade,ano,dataint) banco2=data.frame(banco2) banco2 str(banco1) banco1$nome=as.character(banco1$nome) banco1$sobrenome=as.character(banco1$sobrenome) banco1$idade=as.character(banco1$idade) banco1$ano=as.character(banco1$ano) banco1$dataint=as.character(banco1$dataint) banco2$nome=as.character(banco2$nome) banco2$sobrenome=as.character(banco2$sobrenome) banco2$idade=as.character(banco2$idade) banco2$ano=as.character(banco2$ano) banco2$dataint=as.character(banco2$dataint) library(RecordLinkage) soundexBR<-function(termo){ termo<-toupper(termo) # 1. Retire toda pontuação da palavra; termo<-gsub("[ÃÁÀÂÄ]","A",termo) termo<-gsub("[ÉÈÊ?Ë]","E",termo) termo<-gsub("[ÍÌÏÎI]","I",termo) termo<-gsub("[ÓÕÒÔÖ]","O",termo) termo<-gsub("[ÚÙÛÜU]","U",termo) termo<-gsub("Ç","C",termo) #1.a Substituir todas as letras duplas por uma única letra #http://www.archives.gov/genealogy/census/soundex.html termo<-gsub("([A-Z])\\1", "\\1", termo) # 2. Fique com a primeira letra; N<-nchar(termo) # Modificação PT-BR (Coeli e Camargo) termo<-ifelse(substr(termo,1,2)=="WA",sub("W","V",termo),termo) termo<-ifelse(substr(termo,1,1)=="H",substr(termo,2,N),termo) termo<-ifelse(substr(termo,1,2)=="KA"|substr(termo,1,2)=="KO"|substr(termo,1,2)=="KU",sub("K","C",termo),termo) termo<-ifelse(substr(termo,1,1)=="Y",sub("Y","I",termo),termo) termo<-ifelse(substr(termo,1,2)=="CE"|substr(termo,1,2)=="CI",sub("C","S",termo),termo) termo<-ifelse(substr(termo,1,2)=="GE"|substr(termo,1,2)=="GI",sub("G","J",termo),termo) ############## Segunda Parte ####################### termo.1<-substr(termo,1,1) termo<-substr(termo,2,N) # 3. Mude todas as ocorrências das letras a seguir por '0' (zero): 'A','E','I','O','U','H','W','Y'; termo<-gsub("[A,E,I,O,U,H,W,Y]",0,termo) # 4. Mude as letras restantes de acordo com a tabela abaixo: # Número Letra # 1 'B','F','P','V' termo<-gsub("[B,F,P,V]",1,termo) # 2 'C','G','J','K', 'Q','S','X','Z' termo<-gsub("[C,G,J,K,Q,S,X,Z]",2,termo) # 3 'D','T' termo<-gsub("[D,T]",3,termo) # 4 'L' termo<-gsub("L",4,termo) # 5 'M','N' termo<-gsub("[M,N]",5,termo) # 6 'R' termo<-gsub("R",6,termo) # 5. Remova todos os zeros da string resultante; termo<-gsub(0,"",termo) # Eliminar dois numeros iguais consecutivos por um único numero #http://www.archives.gov/genealogy/census/soundex.html termo<-gsub("([0-9])\\1", "\\1", termo) # Remontar termo<-paste(termo.1,termo,sep="") # 6. Preencha a string resultante com zeros à direita e retorne desta forma: #<letra maiuscula><digito><digito><digito> termo<-paste(termo,"0000",sep="") termo<-substr(termo,1,4) return(termo) } soundexBR("termo") soundexBR("terno") pares=compare.linkage(banco1,banco2,blockfld=list(c(1,2,4),c(1,2)), phonetic=c(1,2),phonfun=soundexBR,strcmp=FALSE, strcmpfun=jarowinkler, exclude=FALSE,identity1=NA,identity2=NA, n_match=NA, n_non_match=NA) editMatch(pares) pares pesos=epiWeights(pares, e=0.01,f=pares$frequencies) hist(pesos$Wdata,plot=F) getPairs(pesos,max.weight=Inf, min.weight=-Inf) Agora, como tenho as datas da internação de todos, preciso verificar, par a par, quem tem data de internação diferente. Estes serão as readmissões. Existe uma forma de eu criar uma coluna para identificar os pares? E depois, testar se as datas de internação são diferentes? Obrigada Fátima