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@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@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
_______________________________________________ R-br mailing list R-br@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.