
Senhores, Como alguns apontaram os dados que preciso vem dando um curl no url. Com código python sugerido pelo Alisson de alguma forma identifica a estrutura com que é organizada os dados e já retorna em tabela. Será que não teria uma forma de imitar o que python faz pelo R? Eu suspeito que seja uma estrutura possível de passar um "parsador". Se fosse html ou xml daria para usar um XML::htmlTreeParse(), mas pelo pouco que conheço é outra forma de organização. Atualmente eu tô fazendo assim mas eu gostaria de melhorar o código. ##----------------------------------------------------------------------------- ## Lê e joga em arquivo testo. system("curl http://www.whoscored.com/Teams/1232 > page.txt") ## Pega só a linha com o conteúdo que interessa e joga em outro ## arquivo. Em seguida substitui as aspas por espaço vazio (quando não ## necessárias, aspas não são bem vindas). system("grep \"DataStore.prime('stage-player-stat'\" page.txt > line.txt") system("sed 's/'\\\"'//g' line.txt > Line.txt") x <- readLines("Line.txt") str(x) ## 1 quebra. x <- unlist(strsplit(x, split="\\[\\{")) str(x) ## 2 quebra. y <- unlist(strsplit(x[2], split="\\},\\{")) str(y) ## Substituição de `,` por `;`. y <- gsub(",(\\S)", ";\\1", y) str(y) ## Quebra os campos. z <- strsplit(y, split=";") str(z) ## Organização. L <- lapply(z, function(w){ w <- strsplit(w, ":") i <- sapply(w, length)==2 w <- w[i] x <- do.call(rbind, w) y <- x[,2] y <- gsub("\\W", "", y) names(y) <- x[,1] y }) M <- do.call(rbind, L) M <- as.data.frame(M, stringsAsFactors=FALSE) M <- as.data.frame(lapply(M, function(x){ y <- as.integer(x) if(all(is.na(y))) return(x) else return(y) }), stringsAsFactors=FALSE) str(M) ##----------------------------------------------------------------------------- Eu sei que tem partes não elegantes aí. O tratamento dos dados não é perfeito. Requer muito ajuste fino e é por isso que acredito que deve ter uma forma mais simples. A minha suspeita é se não tem como imitar o que é feito pelo python na sugestão do Alisson. Outro ponto é que essa base de dados tem 57 colunas. Tem muita informação. Tem valores se o jogador deu ou levou foi drible. Se ele levou cartão amarelo uma ou duas vezes e se levou vermelho. Veja um recorde do str(). $ Yellow : int 0 0 0 1 0 1 0 0 0 0 ... $ SecondYellow : int 0 0 0 0 0 0 0 0 0 0 ... $ Red : int 0 0 0 0 0 0 0 0 0 0 ... $ AerialWon : int 3 2 5 0 3 0 3 3 1 0 ... $ AerialLost : int 1 0 3 0 2 1 7 1 4 0 ... $ WasDribbled : int 1 2 0 1 1 3 1 1 1 0 ... $ Dribbles : int 0 2 0 0 4 2 0 1 0 0 ... $ Height : int 172 176 189 172 178 167 185 171 179 191 ... $ Weight : int 67 72 86 71 69 58 75 70 81 86 ... Quantas disputas de bolas aéreas ganhas ou perdidas. Só nessa dá pra ver se a chance de ganhar uma disputa aérea depende da altura do jogador, um típico binomial. É muito produtivo trabalhar com dados assim em aula, por isso o empenho em obtê-los. Grato a todos pela ajuda, fico no aguardo por qualquer novidade. Walmes.