2010-05-14 20 views
21

Chcesz zmienić format daty. Moja ramka danych jest pokazana poniżej i chciałaby zmienić wszystkie formaty daty na "%d/%m/%Y".Zmiana formatu daty na "% d /% m /% Y"

df:

id bdate  wdate  ddate 
1 09/09/09 12/10/09  2009-09-27 
+3

Trudno zależy od tego, co faktycznie mieć w swojej 'data.frame'. Czy są to pola 'Date',' character', 'factor'? Jeśli chcesz zmienić sposób drukowania 'data.frame', możesz przeciążyć jedną z metod' print' ('print.Date' lub' print.POSIXlt'). – Marek

+0

Witaj Marek, Oto terminy! Bazon – Bazon

Odpowiedz

14
df$ddate<-strftime(df$ddate,"%d/%m/%Y") 
df$bdate<-strftime(strptime(df$bdate,"%d/%m/%y"),"%d/%m/%Y") 
df$wdate<-strftime(strptime(df$wdate,"%d/%m/%y"),"%d/%m/%Y") 
29
df$ddate <- format(as.Date(df$ddate), "%d/%m/%Y") 
2

domyślne R działanie jest traktować ciągi jako czynników. Oczywiście indywidualne ustawienia mogą się różnić od domyślnych. Dobrą praktyką jest zmiana wartości zmiennych na character, a następnie przekonwertowanie jej na date. Często używam pakietu chron - jest ładny, prosty i co najważniejsze, spełnia swoją funkcję. Jedyną wadą tego pakietu jest obsługa strefy czasowej.

Jeśli nie masz chron zainstalowany, wykonaj następujące czynności:

install.packages("chron") 
# load it 
library(chron) 
# make dummy data 
bdate <- c("09/09/09", "12/05/10", "23/2/09") 
wdate <- c("12/10/09", "05/01/07", "19/7/07") 
ddate <- c("2009-09-27", "2007-05-18", "2009-09-02") 
# notice the last argument, it will not allow creation of factors! 
dtf <- data.frame(id = 1:3, bdate, wdate, ddate, stringsAsFactors = FALSE) 
# since we have characters, we can do: 
foo <- transform(dtf, bdate = chron(bdate, format = "d/m/Y"), wdate = chron(wdate, format = "d/m/Y"), ddate = chron(ddate, format = "y-m-d")) 
# check the classes 
sapply(foo, class) 
# $id 
# [1] "integer" 

# $bdate 
# [1] "dates" "times" 

# $wdate 
# [1] "dates" "times" 

# $ddate 
# [1] "dates" "times" 

C'est ca ... powinno załatwić sprawę ...

Powiązane problemy