Kama Jansen

Kama Jansen Student, Akademia
Medyczna w
Amsterdamie

Temat: operacje na datach w R

Witam, mam pytanie czy ktos wie jak przeformatowac daty w R zeby mozna bylo cokolwiek z nimi zrobic?
Konkretny przyklad to taki, mam zbior danych z pacjentami, nazwijmy go "df", w rzedach mam kolejnych pacjentow a w kolumnach rozne zmienne i miedzy innymi rozne daty:
intv_dat, wypis_dat, ur_dat, vit_dat
Jak wczytam plik df i sprawdze class to te wszystkie daty sa klasy factor i pierwszych pare linijek wyglada tak:
3-1-2011 4-1-2011 4-1-2011 5-1-2011 5-1-2011
z wyjatkiem ostatniej daty vit_dat, ktora wyglada tak:
20111116 20111119 20120830 20121127 20121206
Jak widac problem w ostatnim jest taki ze to zostalo na opak zapisane czyli np jest 20111116 zamiast 16-11-2011.
Po 1) Jak to pozamieniac w R? Zrobilam cos takiego:
format(df$vit_dat, format="%m/%d/%Y")
ale nie dziala, otrzymalam:
"20111116" "20111119" "20120830" "20121127" "20121206"
Po 2) Jak pozamieniac w R wszystkie inne daty zeby system widzial ze to sa daty a nie "factors" i zeby mozna bylo wykonac jakies operacje na nich np policzyc liczbe dni miedzy intv_dat a vit_dat czyli "intv_dat"-"vit_dat".
Bede wdzieczna za pomoc.






Jakub Tomaszewski

Jakub Tomaszewski Data Scientist w
AdPilot

Temat: operacje na datach w R

Witam,
zaczynając od końca:

2) Wygodną konwersję dat (np. przechowywanych jako factor) zapewni funkcja as.Date(). Postać wynikową po konwersji można sformatować poprzez argument format.

foo <- c("3-1-2011","5-1-2011")
foo.ydm <- as.Date(x=foo, format="%d-%m-%Y")
foo.ydm # [1] "2011-01-03" "2011-01-05"
class(foo.ydm) # [1] "Date"

Do obliczenia np. różnic w dwóch wektorach zawierających daty wystarczy zamiana ich klasy Date na numeric. Dla pojedynczych dat będzie to, przykładowo, wyglądało tak:

roznica <- as.numeric(foo.ydm[2] - foo.ydm[1])
roznica # [1] 2

Dla dwóch wektorów:

roznica <- as.numeric(wektor.dat1) - as.numeric(wektor.dat2)

1) Tutaj mogą się przydać funkcje paste() oraz substr() (do wyodrębnienia roku, miesiąca, dnia i "sklejenia" ich w jeden string):

bar <- c(20111116, 20111119, 20120830)
bar <- paste(substr(bar,1,4),substr(bar,5,6),substr(bar,7,8),sep=" ")
bar # [1] "2011 11 16" "2011 11 19" "2012 08 30"
bar.ydm <- as.Date(x=bar, format="%Y%m%d")
bar.ydm # [1] "2011-11-16" "2011-11-19" "2012-08-30"

Pozdrawiam.Ten post został edytowany przez Autora dnia 18.11.13 o godzinie 23:26

Następna dyskusja:

filtrowanie po datach




Wyślij zaproszenie do