
Caro Éder, muito obrigado por sua atenção o script esta ótimo. Alisson Lucrécio da Costa On Friday, October 18, 2013 2:30 PM, Éder Comunello <comunello.eder@gmail.com> wrote: Alisson, boa tarde! Embora o script abaixo possa não ser a melhor forma de resolver o problema, deve servir como ponto de partida! ### <BEGIN> ### ### Dados dURL1 <- 'http://r-br.2285057.n4.nabble.com/attachment/4660645/0/normais.clima.csv' dURL2 <- 'http://r-br.2285057.n4.nabble.com/attachment/4660645/1/inmet.mensal.csv' dNormal <- read.table(dURL1, header=T, sep=';') dMensal <- read.table(dURL2, header=T, sep=';') ### Inspecionando os dados (colunas, linhas e contagem de NA's) length(dNormal); nrow(dNormal); length(which(is.na(dNormal))) length(dMensal); nrow(dMensal); length(which(is.na(dMensal))) head(dNormal,3); head(dMensal,3) ### Mapeia os valores NA's naMap <- which(is.na(dNormal), arr.ind = TRUE, useNames = TRUE); head(naMap) ### Visualiza NA's length(naMap[,1]); length(unique(naMap[,1])) ### Linhas que contém algum NA dNormal[unique(naMap[,1]),] dNormal[(naMap[,1]),] ### mesmo que anterior / talvez aplique 'unique' por 'default'? ### Correlacionar as tables usando $Codigo e $Mes e preparar data.frame naData <- data.frame(naMap) naData$Codigo <- dNormal[naMap[,1],]$Codigo naData$Mes <- dNormal[naMap[,1],]$Mes naData$ver <- (naData$Codigo %in% dMensal$Codigo) & (naData$Mes %in% dMensal$Mes) naData$pos <- NA naData$val <- NA ### (ver)ifica correspondência ### (pos)ição da correspondência ### (val)or correspondente head(naData) ### Linhas sem correspondência head(naData[which(naData$ver==F),]) nrow(naData[which(naData$ver==F),]) ### Obter valores para dados com correspondência ($val) for (i in 1:nrow(naData)) { if (naData$ver[i]==TRUE) { naData$pos[i]=(which(dMensal$Codigo==naData[i,3] & dMensal$Mes==naData[i,4])) naData$val[i]=(dMensal[naData$pos[i],naData$col[i]]) }} ### Confere número de dados sem valor (~ linhas sem correspondência) length(which(is.na(naData$val))) ### Nesse ponto, naData compila o valor e a posição onde mudar. head(naData) ### Operando em uma cópia dos dados originais dNormal2 <- dNormal for (i in 1:nrow(naData)) { dNormal2[naMap[i,1],naMap[i,2]] <- naData$val[i] } ### Inspeção final length(which(is.na(dNormal))) ### NA's no original length(which(is.na(dNormal2))) ### NA's no final head(dNormal2) str(dNormal2) #edit(dNormal2) ### <END> ### Éder Comunello <comunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]