2011-01-14 12 views
5

Sono nuovo di R e sono terribile con le date di gestione. La seguente data viene restituita da una query all'API di ricerca di Twitter e viene memorizzata come stringa di caratteri in un mio dataframe.Converti Twitter Timestamp in R

"Fri, 14 Gennaio 2011 03:01:22 +0000"

Come posso convertire questo a una data e cambiare il fuso orario per essere tempo Eastern Standard?

Immagino che questo sia probabilmente semplice, ma mi sono dilettato con il tempo e non ho ottenuto nulla.

Qualsiasi aiuto sarà molto apprezzato!

+0

Che lingua stai usando? - Aggiornamento: nvm, non mi rendevo conto che R era una lingua. Doh. – coreyward

risposta

9

Questo funziona per me (io sono nel Regno Unito):

> (str <- "Fri, 14 Jan 2011 03:01:22 +0000") 
[1] "Fri, 14 Jan 2011 03:01:22 +0000" 

> (str <- strptime(str, "%a, %d %b %Y %H:%M:%S %z", tz = "GMT")) 
[1] "2011-01-14 03:01:22 GMT" 

> (dt.gmt <- as.POSIXct(str, tz = "GMT")) 
[1] "2011-01-14 03:01:22 GMT" 

> format(dt.gmt, tz = "EST", usetz = TRUE) 
[1] "2011-01-13 22:01:22 EST" 

date/orari mi confondono molto, quindi sono sperando che quanto sopra funzioni per te, anche se sei in un fuso orario diverso da GMT, ma non posso esserne sicuro!

Speranza che aiuta un po ', almeno, Tony

+0

Ciao Tony, grazie per l'aiuto. Sulla mia macchina, l'espressione del secondo comando restituisce "NA" come ho ricevuto di seguito. Come riferimento per altre risposte, pensi che abbia a che fare con le mie impostazioni locali? Sono anche su una macchina Windows 7. – Btibert3

+0

Ho eseguito l'aggiornamento a 2.12 e questo codice ha funzionato come previsto (era su 2.10). C'era qualcosa di diverso tra queste due versioni lo sai? – Btibert3

+0

@ Btibert3 non ho idea di cosa sia cambiato tra queste due versioni di R, ma sono contento che abbia funzionato per te. :) –

6

Dal help(strptime):

> Sys.setlocale("LC_TIME", "C") 
[1] "C" 
> strptime("Tue, 23 Mar 2010 14:36:38 -0400", 
+   "%a, %d %b %Y %H:%M:%S %z", 
+   tz="GMT") 
[1] "2010-03-23 18:36:38 GMT" 

attenzione circa il locale: se non si azzera al C, la funzione cercherà di analizzare le abbreviazioni nei giorni feriali e mese come localizzate.

+0

Grazie per l'aiuto, ma quando ho provato a eseguire il codice di esempio, è stato valutato su NA sulla mia macchina. Ho anche provato la stessa chiamata di funzione usando i miei dati e ho ottenuto la stessa cosa. – Btibert3

+0

All'inizio ho ricevuto anche NA. Non ti sei dimenticato di resettare le impostazioni locali? – ulidtko

+0

Sì, ho eseguito il codice e non ha valutato la data, solo NA. grazie ancora per il tuo aiuto, solo perplesso. – Btibert3

1

Consiglio vivamente di dare un'occhiata al pacchetto twitteR di Jeff Gentry su CRAN. Tra le altre sottigliezze, analizza stringhe di data per voi:

> library(twitteR) 
> tweets = searchTwitter('#rstats') 
> length(tweets) 
[1] 25 
> tweet = tweets[[1]] 
> str(tweet) 
Formal class 'status' [package "twitteR"] with 10 slots 
    [email protected] text  : chr "The Joy of Sweave \023 A Beginner\031s Guide to Reproducible Research with Sweave: Just& http://goo.gl/fb/APmCb #rstats" 
    [email protected] favorited : logi FALSE 
    [email protected] replyToSN : chr(0) 
    [email protected] created  : POSIXct[1:1], format: "2011-01-18 04:48:05" 
    [email protected] truncated : logi FALSE 
    [email protected] replyToSID : num(0) 
    [email protected] id   : num 2.72e+16 
    [email protected] replyToUID : num(0) 
    [email protected] statusSource: chr "&lt;a href=&quot;http://www.google.com/support/youtube/bin/answer.py?hl=en&amp;answer=164577&quot; rel=&quot;nofollow&quot;&gt;"| __truncated__ 
    [email protected] screenName : chr "Rbloggers" 
+0

Ciao Jeffrey, l'ho visto e il pacchetto è eccezionale. Una cosa che non ha funzionato per me è stata la chiamata ID per ottenere l'ID dello status di classe, di cui ho bisogno. Per te funziona? Anche se sto ricevendo dati da Twitter, sto usando questo come esempio di analisi generale delle date. Di nuovo. – Btibert3

+0

oh, ora vedo che tratta l'id come un float. Sì, probabilmente non funzionerà così bene ... –