
Boa noite! Estou deparando-me com um pequeno problema: Tenho um data.frame que desejo cortar de acordo com o valor de uma coluna. Esta coluna está em formato de data com hora: YYYY-MM-DD HH:MM:SS Minha intenção é de criar um diretório com a data e um arquivo dentro de cada diretório. Ex: <dir>/data/2015-02-02/saida.csv , <dir>/data/2015-02-03/saida.csv , <dir>/data/2015-02-04/saida.csv etc Entretanto, o que está sendo impresso, e, criado como diretório, é a representação interna do objeto Date Ex: <dir>/data/16467/saida.csv , <dir>/data/16468/saida.csv , <dir>/data/16469/saida.csv etc Já tentei usar as.character(), format(), mas estou ficando sem ideias de como "corrigir". Alguém já passou por isso ou teria alguma sugestão por favor? Segue trecho de código pertinente com um pedaço dos dados: library(R.utils) lines <- " 5928671,14,-3.831290,-38.50146,2015-02-01 00:00:01 5926098,44,-3.709390,-38.58986,2015-02-02 00:01:13 5915217,145,-3.743671,-38.48788,2015-02-03 00:01:16 5444641,174,-3.766271,-38.57452,2015-02-01 00:01:38 2250561,977,-3.738654,-38.48400,2015-02-02 00:01:47 5671754,14,-3.831290,-38.50146,2015-02-03 00:02:43 " con <- textConnection(lines) df <- read.csv(con, header = F) close(con) for (dia in unique(as.Date(df[,5]))){ dfi <- df[as.Date(df[,5]) == dia,] diretorio <- paste(getwd(), "rsc/data", format(dia, format = "%Y-%m-%d"), sep = "/", collapse = "") mkdirs(diretorio) write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = "")) } Dados do ambiente: R version 3.2.0 (2015-04-16) -- "Full of Ingredients" Platform: i386-w64-mingw32/i386 (32-bit) Atenciosamente, David Feitosa (\_(\ (=°;°) (("")("")

David, veja se te ajuda. library(R.utils) lines <- " 5928671,14,-3.831290,-38.50146,2015-02-01 00:00:01 5926098,44,-3.709390,-38.58986,2015-02-02 00:01:13 5915217,145,-3.743671,-38.48788,2015-02-03 00:01:16 5444641,174,-3.766271,-38.57452,2015-02-01 00:01:38 2250561,977,-3.738654,-38.48400,2015-02-02 00:01:47 5671754,14,-3.831290,-38.50146,2015-02-03 00:02:43 " con <- textConnection(lines) df <- read.csv(con, header = F) close(con) *dias <- unique(as.Date(df[, 5]))* *for (i in 1:length(dias)) {* dfi <- df[as.Date(df[, 5]) == *dias[i]*, ] diretorio <- paste(getwd(), "rsc/data", format(*dias[i]*, format = "%Y-%m-%d"), sep = "/", collapse = "") mkdirs(diretorio) write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = "")) }

Diego, obrigado. Funcionou. :-) Mas não entendi a diferença no comportamento. Você poderia explicar por favor? Em 28/05/2015 00:11, "Diego Miro" <d.miro1089@gmail.com> escreveu:
David, veja se te ajuda.
library(R.utils)
lines <- " 5928671,14,-3.831290,-38.50146,2015-02-01 00:00:01 5926098,44,-3.709390,-38.58986,2015-02-02 00:01:13 5915217,145,-3.743671,-38.48788,2015-02-03 00:01:16 5444641,174,-3.766271,-38.57452,2015-02-01 00:01:38 2250561,977,-3.738654,-38.48400,2015-02-02 00:01:47 5671754,14,-3.831290,-38.50146,2015-02-03 00:02:43 " con <- textConnection(lines) df <- read.csv(con, header = F) close(con)
*dias <- unique(as.Date(df[, 5]))* *for (i in 1:length(dias)) {* dfi <- df[as.Date(df[, 5]) == *dias[i]*, ] diretorio <- paste(getwd(), "rsc/data", format(*dias[i]*, format = "%Y-%m-%d"), sep = "/", collapse = "") mkdirs(diretorio) write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = "")) }
_______________________________________________ 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.

David, desculpe a demora em responder. O que ocorre é que a função *as.Date* armazena o objeto o qual foi passado para ela com um número. Ela apenas "mostra" como data, com referência a uma data inicial qualquer (por default 01/01/1970). Quando você usa essas datas (armazenadas como número) no for com o operador in, elas de fato viram números. Tem algumas formas de contornar isso, a que eu te mandei é a que me pareceu mexer menos na lógica do seu script. Você poderia, por exemplo, aplicar novamente a função *as.Data* dentro do for. Substituir *format(dia, format = "%Y-%m-%d")* por *as.Date(dia, origin = "1970-01-01")* Um abraço.

Diego, ok. Então o uso do "in" faz acesso direto usando a representação interna, "crua". Enquanto que deixar na estrutura de array, permite o uso do "objeto original". Obrigado por detalhar, embora eu ainda ache o comportamento estranho para uma estrutura de "for each", mas tudo bem. Cada dia um aprendizado novo. Atenciosamente, David F. Em 29 de maio de 2015 18:40, Diego Miro <d.miro1089@gmail.com> escreveu:
David, desculpe a demora em responder.
O que ocorre é que a função *as.Date* armazena o objeto o qual foi passado para ela com um número. Ela apenas "mostra" como data, com referência a uma data inicial qualquer (por default 01/01/1970). Quando você usa essas datas (armazenadas como número) no for com o operador in, elas de fato viram números.
Tem algumas formas de contornar isso, a que eu te mandei é a que me pareceu mexer menos na lógica do seu script.
Você poderia, por exemplo, aplicar novamente a função *as.Data* dentro do for. Substituir *format(dia, format = "%Y-%m-%d")* por *as.Date(dia, origin = "1970-01-01")*
Um abraç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.

Não estou conseguindo rodar vosso exemplo, falta alguma biblioteca por acaso?
lines <- "
+ 5928671,14,-3.831290,-38.50146,2015-02-01 00:00:01 + 5926098,44,-3.709390,-38.58986,2015-02-02 00:01:13 + 5915217,145,-3.743671,-38.48788,2015-02-03 00:01:16 + 5444641,174,-3.766271,-38.57452,2015-02-01 00:01:38 + 2250561,977,-3.738654,-38.48400,2015-02-02 00:01:47 + 5671754,14,-3.831290,-38.50146,2015-02-03 00:02:43 + "
con <- textConnection(lines)
df <- read.csv(con, header = F)
close(con)
dias <- unique(as.Date(df[, 5]))
for (i in 1:length(dias)) {
+ dfi <- df[as.Date(df[, 5]) == dias[i], ] + diretorio <- paste(getwd(), "rsc/data", format(dias[i], format = "%Y-%m-%d"), + sep = "/", collapse = "") + mkdirs(diretorio) + write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = "") + } Error: unexpected '}' in: " write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = "") }" David, desculpe a demora em responder. O que ocorre é que a função as.Date armazena o objeto o qual foi passado para ela com um número. Ela apenas "mostra" como data, com referência a uma data inicial qualquer (por default 01/01/1970). Quando você usa essas datas (armazenadas como número) no for com o operador in, elas de fato viram números. Tem algumas formas de contornar isso, a que eu te mandei é a que me pareceu mexer menos na lógica do seu script. Você poderia, por exemplo, aplicar novamente a função as.Data dentro do for. Substituir format(dia, format = "%Y-%m-%d") por as.Date(dia, origin = "1970-01-01") Um abraço. --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Olá Está faltando um parenteses no final de: write.csv(dfi, paste(diretorio, "saida.csv", sep = "/", collapse = ""))
participantes (5)
-
David Feitosa
-
David Feitosa
-
Diego Miro
-
Mauro Sznelwar
-
salah