2015-04-28 10 views
6

Mam ramkę danych z 10 datami, które odczytałem do R jako liczby całkowite. Oto ramka danych:Ramka danych integer do tej pory w R

19820509 
19550503 
20080505 
19590505 
19940517 
19690504 
20050420 
20060503 
19840427 
19550513 

Nazwamy to df.

próbowałem kilka różnych linii kodu, żeby po prostu zmienić każdą wartość do formatu daty w R tak: "1982-05-09"

df <- as.Date(df, "%Y%m%d") 

nie działa i nie robi

df <- as.POSIXlt(df, format = "%Y/%m/%d") 

lub

df <- as.POSIXct(df), format = "%Y/%m/%d", origin = "19820509") 

Ciągle pojawia się komunikat "nie wiem, jak konwertować" d f 'do klasy "date" lub dowolnego z formatów POSIX.

Myślałem, że to będzie prostsze. Jakieś pomysły?

Dziękuję.

+6

Musisz użyć jej w kolumnie ramki danych, a nie samej ramce danych. –

+0

Oto rozwiązanie POSIX, gdzie df to twoja data.frame: 'as.POSIXct (as.character (df [, 1]), format ="% Y% m% d ")' –

Odpowiedz

7

Musisz odwoływać się do konkretnych kolumn, a nie tylko odwoływać się do ramki danych. Jeśli zmienna zawierająca daty całkowita jest w ramce danych df i nazywa x, można to zrobić:

df <- transform(df, x = as.Date(as.character(x), "%Y%m%d")) 

#    x 
# 1 1982-05-09 
# 2 1955-05-03 
# 3 2008-05-05 
# 4 1959-05-05 
# 5 1994-05-17 
# 6 1969-05-04 
# 7 2005-04-20 
# 8 2006-05-03 
# 9 1984-04-27 
# 10 1955-05-13 

ten konwertuje liczby całkowite do ciągów znaków, a następnie interpretuje sznurki jak terminach.

Jeśli wy wiele kolumn zawierających datę w tym formacie, to może konwertować je za jednym zamachem, ale trzeba zrobić to nieco inaczej:

df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%Y%m%d"))) 

lub nawet lepiej, jak docendo discimus mowa w komentarz:

df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")) 
+0

To działa!Próbowałem to na początku, ale wciąż było wybredne. Konwersja znaków działa. Dziękuję Ci. – user3720887

+0

@ user3720887: Cieszę się, że to działa dla ciebie. –

+1

Dla lapońskiego kodu, możesz lekko zmodyfikować go do: 'df [] <- lapply (df, function (x) as.Date (as.character (x),"% Y% m% d ")) nie potrzebujesz wywołania funkcji data.frame –

4

Oto moje rozwiązanie, wymaga pakiet lubridate. Możesz użyć funkcji ymd pakietu lubridate jako "funkcji wymiany". Po prostu wybierz kolumnę, którą chcesz przekonwertować, zastąp ją wersją ymd.

library(lubridate) 
data[ , 1 ] <- ymd(data[, 1]) 

Pakiet ten zapewnia więcej funkcji do analizowania danych lub ciągi do dat, RMD (y = rok, m = miesiąc, d = dzień) wszystko z tego prostego schematu.

+0

Dziękujemy! Tak, szukałem więcej w pakiecie do radzenia sobie z różnymi zadaniami związanymi z datą w R. – user3720887

0

v = C ($ danych DATA)

Data < - as.Date (pasty (V), w formacie ("% r% m% d"))

Data

dane $ DATE jest datą przenoszenia kolumny w formacie całkowitym, np. 20000131, 20000201

Powiązane problemy