2016-06-24 8 views
0

Ich habe diese data.frame:Spalten von Zeichen zu POSIXt

df 
    Date   A_F.t. Date.1  A_S.t. Date.2 B_F.t.  Date.3 B_S.t.  Date.4 C_F.t.  Date.5 C_S.t. 
1 1988-12-29 1.7852 27-Dec-88  1.804000 1988-12-29 0.8360505 28-Dec-88 0.836820 1988-12-29 0.007959249 28-Dec-88 0.007963 
2 1988-12-30 1.8027 28-Dec-88  1.789000 1988-12-30 0.8368901 29-Dec-88 0.838574 1988-12-30 0.008019246 29-Dec-88 0.007946 
3 1989-01-04 1.8001 29-Dec-88  1.789500 1989-01-03 0.8394889 30-Dec-88 0.838364 1989-01-03 0.008113590 30-Dec-88 0.007997 
4 1989-01-10 1.7572 30-Dec-88  1.808500 1989-01-04 0.8371704 2-Jan-89  ND 1989-01-04 0.008019246 2-Jan-89  ND 
5 1989-01-16 1.7540 2-Jan-89   ND 1989-01-05 0.8368201 3-Jan-89 0.839842 1989-01-06 0.007930843 3-Jan-89 0.008091 
6 1989-01-17 1.7655 3-Jan-89  1.822500 1989-01-06 0.8380825 4-Jan-89 0.838856 1989-01-09 0.007947230 4-Jan-89 0.007997 

die Klasse von vorne $ Date, Vorwärts $ Date.2, Vorwärts $ Date.4 ist "POSIXct" "POSIXt"

die Klasse der vorwärts $ Date.1, vorwärts $ Date.3, vorwärts $ Date.5 ist Charakter

wie kann ich auf "POSIXct" "POSIXt" drehen nur die Spalten Forward$Date.1, Forward$Date.3 und Forward$Date.5?

Wenn ich as.POSIXct(as.Date(x,"%d-%b-%y")) wie Ben meine df vorgeschlagen wie das ging:

df 
     Date   A_F.t. Date.1  A_S.t. Date.2 B_F.t.  Date.3 B_S.t.  Date.4 C_F.t.  Date.5 C_S.t. 
1 1988-12-29 1.7852    <NA>  1.804000 1988-12-29 0.8360505    <NA> 0.836820 1988-12-29 0.007959249    <NA> 0.007963 
2 1988-12-30 1.8027    <NA>  1.789000 1988-12-30 0.8368901    <NA> 0.838574 1988-12-30 0.008019246    <NA> 0.007946 
3 1989-01-04 1.8001    <NA>  1.789500 1989-01-03 0.8394889    <NA> 0.838364 1989-01-03 0.008113590    <NA> 0.007997 
4 1989-01-10 1.7572    <NA>  1.808500 1989-01-04 0.8371704 1989-01-01 22:00:00  ND 1989-01-04 0.008019246 1989-01-01 22:00:00  ND 
5 1989-01-16 1.7540 1989-01-01 22:00:00   ND 1989-01-05 0.8368201 1989-01-02 22:00:00 0.839842 1989-01-06 0.007930843 1989-01-02 22:00:00 0.008091 
6 1989-01-17 1.7655 1989-01-02 22:00:00  1.822500 1989-01-06 0.8380825 1989-01-03 22:00:00 0.838856 1989-01-09 0.007947230 1989-01-03 22:00:00 0.007997 

Antwort

1
dd <- read.table(header=TRUE,text=" 
Date   A_F.t. Date.1  A_S.t. Date.2 B_F.t.  Date.3 B_S.t.  Date.4 C_F.t.  Date.5 C_S.t. 
1 1988-12-29 1.7852 27-Dec-88  1.804000 1988-12-29 0.8360505 28-Dec-88 0.836820 1988-12-29 0.007959249 28-Dec-88 0.007963 
2 1988-12-30 1.8027 28-Dec-88  1.789000 1988-12-30 0.8368901 29-Dec-88 0.838574 1988-12-30 0.008019246 29-Dec-88 0.007946 
3 1989-01-04 1.8001 29-Dec-88  1.789500 1989-01-03 0.8394889 30-Dec-88 0.838364 1989-01-03 0.008113590 30-Dec-88 0.007997 
4 1989-01-10 1.7572 30-Dec-88  1.808500 1989-01-04 0.8371704 2-Jan-89  ND 1989-01-04 0.008019246 2-Jan-89  ND 
5 1989-01-16 1.7540 2-Jan-89   ND 1989-01-05 0.8368201 3-Jan-89 0.839842 1989-01-06 0.007930843 3-Jan-89 0.008091 
6 1989-01-17 1.7655 3-Jan-89  1.822500 1989-01-06 0.8380825 4-Jan-89 0.838856 1989-01-09 0.007947230 4-Jan-89 0.007997") 

Wie wäre:

cols.to.fix <- c("Date.1","Date.3","Date.5") 
dd[cols.to.fix] <- lapply(dd[cols.to.fix], 
     function(x) as.POSIXct(as.Date(x,"%d-%b-%y"))) 

Beachten Sie, dass, um mit diesem die %b Formatspezifizierer erfolgreich zu verwenden, Data Set, müssen Sie Ihr Gebietsschema auf eins gesetzt haben, wo die Monatsabkürzungen mit denen in Ihrem Datensatz übereinstimmen; von strptime (Hervorhebung hinzugefügt):

‚% b‘ Abgekürzter Monatsname in den aktuellen Locale auf dieser Plattform. (Paßt auch vollständige Namen bei der Eingabe: in einigen Orten gibt es keine Abkürzungen von Namen.)

So etwas wie:

old_time <- Sys.getlocale("LC_TIME") 
Sys.setlocale("LC_TIME","C") 
## do stuff 
Sys.setlocale("LC_TIME",old_time) ## restore locale 

sollte funktionieren ...

+0

Danke, Ben Bolker! ! . Aber es war nicht so, wie ich es erwartet hatte. Ich habe die Frage bearbeitet. Könnten Sie bitte für mich sehen? – Laorie

Verwandte Themen