[R-br] Criar um dataframe pela combinação de duas linhas de informação em *txt

Henrique Dallazuanna wwwhsd em gmail.com
Ter Mar 31 16:01:01 -03 2020


Segue outra sugestão usando pacote base do R:

mydf <- cbind.data.frame(do.call(rbind,
lapply(strsplit(myfile[!seq(length(myfile)) %% 2], ", "),
function(x)gsub(".*\\=", "", x))), lca = gsub(".*\\:\\s+", "",
myfile[seq(length(myfile)) %% 2]))

On Mon, Mar 30, 2020 at 12:03 PM ASANTOS por (R-br) <
r-br em listas.c3sl.ufpr.br> wrote:

> Prezados membros do r-br,
>
> Eu gostaria de criar um novo data frame à partir de output de uma análise
> em *txt empregando o pacote *tidyverse*, sendo:
>
> library(tidyverse)
>
> #Arquivo original
> https://www.dropbox.com/s/2f13c2wb66zfrmr/result.txt?dl=0
>
> #Faço a leitura do arquivo
> myfile<-read_lines("result.txt")
>
> #Separo o nome do arquivo
> filename<-myfile[1]
> filename<-gsub("\\..*","",filename)
> filename
> #[1] "sample_107"
>
> #Então removo a primeira linha que só tem a informação do nome do arquivo
> que o originou
> myfile<-myfile[-1]
>
>
> #Estrutura parcial do arquivo myfile
> #
> head(myfile)
> #[1] "lca: 84%"
> #[2] "left=475, right=586, top=0, bottom=527, obj_id=0, obj=lca "
> #[3] "lca: 82%"
> #[4] "left=548, right=553, top=0, bottom=722, obj_id=0, obj=lca "
> #[5] "lca: 79%"
> $[6] "left=439, right=534, top=174, bottom=440, obj_id=0, obj=lca "
> #
>
> Agora, eu quero criar um data frame onde eu reorganize essa informação de
> modo que sempre a linha superior que começa com "lca:... forme a última
> coluna da informação da linha abaixo que inicia-se com "left= ...., de
> forma que meu *dataframe* final fique, baseado na estrutura parcial
> apresentada:
>
> left right top bottom obj_id obj lca
> 475  586   0   527    0      lca 84
> 548  553   0   722    0      lca 82
> 439  534   174 440    0      lca 79
>
> Para ao final salvar como:
> write.table(mydataframe, paste0("pred_",filename, "*txt"),h=T)
>
> Tentei uma derivação das sugestões do Max, mas eu tenho um problema, pois
> na primeira linha
> os valores estão depois de ":" e na segunda depois de "=". Também tenho
> uma variável que chama lca
> na primeira linha e um nível lca na variável obj do meu arquivo myfile.
>
> names_col <- c("left", "right", "top", "botton", "obj_id",
> "obj","lca")
>
> mydf <- myfile %>%
>   str_subset("lca$") %>%
>   enframe(name = NULL) %>%
>   separate(col = value, into = names_col, sep = "[=,]") %>%
>   mutate_all(parse_number)
>
> head(as.data.frame(mydf))
> #[1] left   right  top    botton obj_id obj    lca
> #<0 linhas> (ou row.names de comprimento 0)
>
> Alguém que trabalha com manipulação de tabelas em R teria alguma dica para
> dar?
>
> Obrigado,
>
> Alexandre
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>


-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20200331/3b43a37e/attachment.html>


Mais detalhes sobre a lista de discussão R-br