Lendo datas no R

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Lendo datas no R

Mensagem por Prof. Marcos em Sex Jan 15, 2016 5:38 pm

Oi, pessoal!

Em um http://programa-r.forumeiros.com/t11-duvida-basica, a Renata perguntou sobre como ler datas e horas no R (e no webnário, acho que a Giovanna perguntou sobre as datas também).
Estou aqui respondendo a primeira parte, ok? Wink Depois crio um tópico sobre leitura de horários.

Vamos começar com um conjuntinho simples de dados. Copiem e colem no R:

Código:

datas<-structure(list(data1 = structure(c(4L, 3L, 1L, 2L), .Label = c("06-11-2011",
"18-09-1983", "24-12-2007", "26-06-1981"), class = "factor"),
    data2 = structure(c(4L, 3L, 1L, 2L), .Label = c("06/11/2011",
    "18/09/1983", "24/12/2007", "26/06/1981"), class = "factor"),
    data3 = structure(c(1L, 3L, 4L, 2L), .Label = c("1981-06-26",
    "1983-09-18", "2007-12-24", "2011-11-06"), class = "factor"),
    data4 = structure(c(4L, 3L, 1L, 2L), .Label = c("06/11/11",
    "18/09/83", "24/12/07", "26/06/81"), class = "factor")), .Names = c("data1",
"data2", "data3", "data4"), class = "data.frame", row.names = c(NA, -4L))

datas

summary(datas)


Não se preocupem com a parte grande do código, ela serve apenas para criar os dados, para não precisarmos de um arquivo.

Note que o R leu tudo certinho, mas em nenhuma das colunas ele identificou os dados como datas corretamente. Eu sei disso porque no summary ele deveria identificar os valores mínimos, máximos e etc, como em qualquer variável quantitativa. Ao invés disso, ele leu como variáveis categóricas.

Agora vamos olhar os dados: as quatro colunas mostram as mesmas datas, mas cada uma está em um formato diferente:
data1: dia-mês-ano
data2: dia/mês/ano
data3: ano-mês-dia
data4: dia/mês/ano, mas neste caso o ano está apenas com os dois últimos números

Como o R lida com isso?
Podemos usar uma função chamada as.Date(), que lê a data com a nossa ajuda (a gente precisa informar pra ele o formato) e converte os dados. é bem simples, na verdade! Vamos lá? Começando com a coluna data1:

Código:

datas$data1<-as.Date(datas$data1, "%d-%m-%Y")
summary(datas)

Viu agora como está a data no summary? Ele entendeu que são datas, e agora trata os dados da forma correta. Perceba que no R ele sempre vai mostrar neste formato de ano-mês-dia, certo?

Veja ali dentro da função o que fizemos. Entre aspas dissemos que os nosso dados estão no formato dia-mês-ano. Os sinais "%" são importantes, pois sinalizam onde começa cada pedaço de informação.
Para entender melhor, veja como fica com as duas próximas colunas:

Código:

datas$data2<-as.Date(datas$data2, "%d/%m/%Y")
datas$data3<-as.Date(datas$data3, "%Y-%m-%d")
summary(datas)

Legal, né?

Mas e a última coluna? Deixei ela pro final por um detalhe: repare que o símbolo para ano que usamos nos exemplos acima foi a letra Y (de year), sempre maiúscula. Ela esta maiúscula porque o formato é de ano com os quatro dígitos. Quando o ano tiver apenas dois dígitos, devemos usar o y minúsculo. Assim:

Código:

datas$data4<-as.Date(datas$data4, "%d/%m/%y")
summary(datas)

E pronto! cheers

Pode parecer estranho no começo, mas é bem simples. Vocês podem criar um script de conversão de datas, incluindo vários exemplos de formatos, e abrir pra usar quando for necessário. O bacana disso é que vocês podem continuar colocando as datas no excel no formato que preferirem, e depois no R basta converter ao ler o arquivo.

Em caso de dúvidas, perguntem aqui! Wink
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Sab Jan 16, 2016 1:25 pm

Ah, entendi! Muito Obrigada Marcos.

Very Happy
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Ter Jan 19, 2016 7:37 am

Bom dia Marcos, poderia ver pra mim a leitura de horas pelo R. Tenho alguns dados de atividade que tenho que agrupar por faixas de horário, entende? Tipo 32 lagartos ativos das 10:00 as 10:59. e dai precisaria que o R entendesse os horários. Obrigada
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Ter Jan 19, 2016 12:14 pm

Renata Cardoso Vieira escreveu:Bom dia Marcos, poderia ver pra mim a leitura de horas pelo R. Tenho alguns dados de atividade que tenho que agrupar por faixas de horário, entende? Tipo 32 lagartos ativos das 10:00 as 10:59. e dai precisaria que o R entendesse os horários. Obrigada

Oi, Renata!

Então, andei olhando um pouco o funcionamento do uso de horas no R, e me pareceu mais complexo do que as datas. Normalmente as horas são inseridas junto com datas, em uma mesma coluna: algo como ter uma célula mostrando "26/06/1981 20:30" por exemplo.

Eu ainda não entendi se ele lê as horas como coisas independentes, no formato tradicional de hora:minutos. Mas imagino que uma solução simples seria usar o número corrido, sem a pontuação. Então 09:00 seria 900, 11:00 seria 1100, 22:30 seria 2230, por exemplo.
Se o seu objetivo é apenas classificar em intervalos, este formato vai funcionar bem facilmente, pois os intervalos vão ser simples intervalos numéricos. E aí a conversão no excel fica fácil, basta substituir os ':' por nada.

Qualquer coisa podemos montar um exemplo do que você quer fazer. Se for o caso, descreva melhor um pouco dos dados e do que você precisa, assim podemos montar uma planilha de exemplo como eu fiz com o caso das datas.
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Ter Jan 19, 2016 12:15 pm

Vou tentar agora a tarde e dai aviso se funcionou! Obrigada
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Ter Jan 19, 2016 2:30 pm

Oi Marcos,

Em princípio as horas funcionaram dessa forma, mas estou com outra dúvida.

Tenho dados de temperatura e quando mando fazer a média vem a seguinte resposta:

> mean(Tar)
[1] NA
> sd(Tar)
[1] NA
> quantile(Tar, c(0, 0.1, 0.25, 0.5, 0.75, 0.9, 1))
Error in quantile.default(Tar, c(0, 0.1, 0.25, 0.5, 0.75, 0.9, 1)) :
missing values and NaN's not allowed if 'na.rm' is FALSE

Sabe me dizer porque? É por causa dos valores faltantes que estão como NA?
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Ter Jan 19, 2016 8:37 pm

Use o na.rm=T como argumento das funções e veja se funciona.

mean(Tar, na.rm=T)

E por aí vai. Depois avise se funcionou, ok?
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Qua Jan 20, 2016 9:21 am

Bom dia Marcos,

Não funcionou! Dá a seguinte mensagem:

mean(Tar, na.rm = T)
[1] NA
Warning message:
In mean.default(Tar, na.rm = T) :
argumento não é numérico nem lógico: retornando NA
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Qua Jan 20, 2016 9:24 am

Achei o erro, foi um problema de maiúsculas e minúsculas. Resolvido. Obrigada
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Qua Jan 20, 2016 6:28 pm

Renata Cardoso Vieira escreveu:Achei o erro, foi um problema de maiúsculas e minúsculas. Resolvido. Obrigada
Beleza então! Very Happy

Qualquer coisa é só perguntar.
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 9:56 am

Bom dia Marcos,

Estou fazendo um boxplot e não consigo tirar um único dado que não pode ser levado em conta na figura... Porque ele cria um boxplot a mais. Acho que coloquei o na.rm=T do jeito errado, mas não estou conseguindo achar o modo correto. Pode me ajudar?

par(mfrow=c(1,2))
boxplot(Deslocamento~Sexo,na.rm = T, las=1, xlab="Sexo", ylab="Deslocamentos (m)", range=0)
boxplot(Deslocamento~Idade, las=1, xlab="Idade", ylab="Deslocamentos (m)", range=0)

Obrigada,

avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Dom Jan 24, 2016 11:01 am

Oi, Renata!

Como assim cria um a mais? Ele cria uma caixa extra, como uma categoria a mais?

Se for isso, a minha primeira desconfiança é que ao usar o na.rm o R ficou com alguma categoria "vazia" de dados, e aí ele tenta plotar a categoria, mas não tem dados para ela.

Dê um tapply(Deslocamento, Sexo, quantile, na.rm=T)
E um tapply(Deslocamento, Idade, quantile, na.rm=T)

E cole aqui o resultado.

Se quiser, inclua uma imagem do boxplot para mostrar o que há errado, ok?

Abraços
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 11:06 am

[/img][img][/img]
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 11:07 am

Oi Marcos,

Foi isso que aconteceu (a imagem foi duas vezes, sorry)! Na minha variável categorica ele cria uma nova categoria com na que eu não quero que apareça.

avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 11:10 am

Achei o erro, um espaço a mais!!! Very Happy

Já que eu já resolvi esse, posso te perguntar outra coisa.. heheh

Rodei uma regressão linear e tem um único resíduo que tenho que retirar. Como posso retirar?

Obrigada
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Dom Jan 24, 2016 12:07 pm

hahahah, que bom que já resoveu só. Seguimos, então.

Na regressão, você sempre deve salvar o resultado como um objeto, mais ou menos assim:

resultado<-lm(vary~varx)

Neste formato, os resíduos podem ser acessados em:

resultado$residuals

E aí você pode usar os resíduos para o que precisar: inspeção visual, teste de normalidade, ou outras coisas.
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 12:29 pm

Ah bacana.

Fiz o teste de normalidade: shapiro.test(rstudent(resmodelo))
Shapiro-Wilk normality test
data:  rstudent(resmodelo)
W = 0.33184, p-value = 1.321e-10

O gráfico da Regressão ficou assim: " />

Dai pensei que se eu deveria excluir esse outline e refazer, que tu achas? Como posso fazer isso?

E os resíduos estão assim:

resmodelo$residuals
         1           2           3           4           5           6
-11940.6703  -8733.3463 -11201.1408   8117.5064  -7849.7874  -5734.7874
         7           8           9          10          11          12
-8407.2874  -5227.6696 -11206.1408  -4509.7817  -7642.7817  -7141.8169
        13          14          15          16          17          18
-8989.3463  -9533.4052  -4047.8764  -6029.6114   3451.6537  -5670.4929
        19          20          21          22          23          24
  940.7126  33193.0064   7410.2414 105082.5359   2443.4181 -10493.0230
        25          26          27          28          29          30
 -178.4347  -8423.6114 -10739.5525  14867.0948  -8389.2874 -13416.3175
avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Dom Jan 24, 2016 2:39 pm

O gráfico não apareceu aqui.

De qualquer forma, você pode excluir um outlier qualquer quando usar o comando da regressão, bastando saber a linha a qual ele pertence.

Por exemplo: lm(vary[-5,]~varx[-5,])
Neste caso eu excluí a linha 5 da regressão.

Tem um monte de outras maneiras, mas acho essa uma das mais rápidas e práticas.
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Renata Cardoso Vieira em Dom Jan 24, 2016 2:59 pm

Obrigada Marcos,

Funcionou assim: lm(vary[-5]~varx[-5]), sem as vírgulas após o 5.

avatar
Renata Cardoso Vieira

Mensagens : 41
Data de inscrição : 22/12/2015
Idade : 31

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Prof. Marcos em Dom Jan 24, 2016 3:03 pm

Ih, verdade! Como estamos nos referindo apenas à variável, então não faz sentido a vírgula. Ela só precisaria ser usada no caso de seleção de todos os dados! Ops!

Que bom que você detectou e corrigiu o erro. Smile
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Lendo datas no R

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum