2011-01-14 16 views
5

Jestem nowy dla R i jestem okropny z datami obsługi. Następująca data jest zwracana z zapytania do interfejsu API wyszukiwarki Twitter i jest przechowywana jako ciąg znaków w mojej ramce danych.Konwertuj znacznik czasu Twittera w R

"piątek, 14 stycznia 2011 03:01:22 +0000"

Jak mogę przekonwertować to do daty i zmienić strefę czasową, aby być Standardowy czas wschodni?

Sądzę, że to najprawdopodobniej nieskomplikowane działanie, ale poruszyłem się i nie dotarłem do niczego.

Każda pomoc zostanie bardzo doceniona!

+0

Jakiego języka używasz? - Aktualizacja: nvm, nie zdawałem sobie sprawy, że R jest językiem. Doh. – coreyward

Odpowiedz

9

Działa to dla mnie (jestem w Wielkiej Brytanii):

> (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" 

Daty/czasy mylić mi dużo, więc jestem mając nadzieję, że powyższe działa dla Ciebie, nawet jeśli jesteś w innej strefie czasowej niż GMT, ale nie jestem tego pewien!

Mam nadzieję, że pomaga trochę przynajmniej Tony

+0

Cześć Tony, dzięki za pomoc. Na moim komputerze wyrażenie drugiej komendy zwraca "NA", co otrzymałem poniżej. W odniesieniu do innych odpowiedzi, czy myślisz, że ma to związek z moimi ustawieniami narodowymi? Jestem również na komputerze z Windows 7. – Btibert3

+0

Zaktualizowałem do wersji 2.12 i ten kod działał zgodnie z oczekiwaniami (był w wersji 2.10). Czy wiesz, że jest coś innego między tymi dwiema wersjami? – Btibert3

+0

@ Btibert3 Nie mam pojęcia, co się zmieniło między tymi dwoma wersjami R, ale cieszę się, że zadziałało dla Ciebie. :) –

6

Z 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" 

Bądź ostrożny o lokalizacji: jeśli nie wyzerować go C, funkcja będzie próbować analizować codzienne i miesiąc skróty jak miejscowe.

+0

Dzięki za pomoc, ale kiedy próbowałem uruchomić swój przykładowy kod, ocenił on NA na moim komputerze. Próbowałem nawet tej samej funkcji, używając moich danych i otrzymałem to samo. – Btibert3

+0

Na początku też dostałem NA. Czy nie zapomniałeś zresetować ustawień regionalnych? – ulidtko

+0

Tak, uruchomiłem twój kod i nie oceniłem do daty, tylko NA. Jeszcze raz dziękuję za pomoc, po prostu zakłopotany. – Btibert3

1

Gorąco polecam przyjrzeć się pakietowi twitteR Jeffa Gentry'ego na CRAN. Wśród innych subtelności, analizuje date sznurki dla Ciebie:

> 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

Cześć Jeffrey, widziałem to i pakiet jest wspaniały. Jedną z rzeczy, która nie działała dla mnie, było wywołanie ID, aby uzyskać identyfikator "statusu" klasy, który jest mi potrzebny. Czy Ci to pasuje? Mimo że otrzymuję dane z Twittera, używam tego jako przykładu ogólnego parsowania daty. Jeszcze raz. – Btibert3

+0

oh, widzę teraz, że traktuje id jako float. Tak - to prawdopodobnie nie zadziała tak dobrze ... –