2016-05-11 2 views
2

Ich habe einige Daten bekommt die Zeichenklasse:Probleme mit einer neuen Spalte in Datentabelle zu schaffen strptime mit

class(solarX[,MEASDATE]) 
[1] "character" 

das wie folgt aussieht:

head(solarX[,MEASDATE]) 
[1] "1/05/2015 0:00" "1/05/2015 0:30" "1/05/2015 1:00" "1/05/2015 1:30" "1/05/2015 2:00" "1/05/2015 2:30" 

aber ich will es nicht im Zeichenformat und muss in der Lage sein, auf den Stunden- und Minuten-Teil der Datum-Uhrzeit zuzugreifen.

, was ich versucht habe, ist:

strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M")) 

die großen Werke, es gibt mir:

[1] "2015-05-01 00:00:00 AEST" "2015-05-01 00:30:00 AEST" "2015-05-01 01:00:00 AEST" "2015-05-01 01:30:00 AEST" "2015-05-01 02:00:00 AEST" 
[6] "2015-05-01 02:30:00 AEST" 



class(strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M")) 
[1] "POSIXlt" "POSIXt" 

Allerdings, wenn ich, indem Sie meine ursprüngliche Datentabelle gehen zu erweitern:

solarX[, date := strptime(solarX[,MEASDATE], "%d/%m/%Y %H:%M")] 

(solarX ist meine Datentabelle)

erhalte ich die folgende Warnung:

Warning message: 
In `[.data.table`(solarX, , `:=`(date, strptime(solarX[, MEASDATE], : 
    Supplied 11 items to be assigned to 17568 items of column 'date' (recycled leaving remainder of 1 items) 

Und die Datentabelle zurück sieht schrecklich aus:

MEASDATE  rrp exp_kwh      date 
1: 1/05/2015 0:00 33.99299  0    0,0,0,0,0,0, 
2: 1/05/2015 0:30 31.53335  0  0,30, 0,30, 0,30, 
3: 1/05/2015 1:00 29.37092  0    0,0,1,1,2,2, 
4: 1/05/2015 1:30 28.03197  0    1,1,1,1,1,1, 
5: 1/05/2015 2:00 26.82800  0    4,4,4,4,4,4, 
6: 1/05/2015 2:30 25.22149  0 115,115,115,115,115,115, 

Klar ich so aussehen nicht das „Datum“ -Spalte wollen, vielmehr haben sie gefüllt mit den Werten, die ich von der ursprünglichen strptime Funktion bekommen habe.

+0

'solarX [, Datum: = strptime (MEASDATE, "% d /% m /% Y% H:% M") ] ' – HubertL

+0

entfernen Sie die' SolarX' innerhalb der 'Strptime' – SymbolixAU

+0

ja, was @HubertL sagte. – SymbolixAU

Antwort

1

Sie können nicht in POSIXltdata.table verwenden, verwenden POSIXct statt:

library(data.table) 
## setting up the data 
solarX <- fread('MEASDATE  rrp exp_kwh 
"1/05/2015 0:00" 33.99299 0 
"1/05/2015 0:30" 31.53335 0 
"1/05/2015 1:00" 29.37092 0 
"1/05/2015 1:30" 28.03197 0 
"1/05/2015 2:00" 26.82800 0 
"1/05/2015 2:30" 25.22149 0') 

solarX[, date := as.POSIXct(MEASDATE, format = "%d/%m/%Y %H:%M")] 

#   MEASDATE  rrp exp_kwh    date 
# 1: 1/05/2015 0:00 33.99299  0 2015-05-01 00:00:00 
# 2: 1/05/2015 0:30 31.53335  0 2015-05-01 00:30:00 
# 3: 1/05/2015 1:00 29.37092  0 2015-05-01 01:00:00 
# 4: 1/05/2015 1:30 28.03197  0 2015-05-01 01:30:00 
# 5: 1/05/2015 2:00 26.82800  0 2015-05-01 02:00:00 
# 6: 1/05/2015 2:30 25.22149  0 2015-05-01 02:30:00 

str(solarX) 
Classes ‘data.table’ and 'data.frame': 6 obs. of 4 variables: 
$ MEASDATE: chr "1/05/2015 0:00" "1/05/2015 0:30" "1/05/2015 1:00" "1/05/2015 1:30" ... 
$ rrp : num 34 31.5 29.4 28 26.8 ... 
$ exp_kwh: int 0 0 0 0 0 0 
$ date : POSIXct, format: "2015-05-01 00:00:00" "2015-05-01 00:30:00" "2015-05-01 01:00:00" "2015-05-01 01:30:00" ... 
- attr(*, ".internal.selfref")=<externalptr> 
+0

Ich kann nicht sehen, wie Sie dieses Ergebnis erhalten haben. Abgesehen von Ihrem gsub mit dem "_", das zu der gleichen MEASDATE-Spalte führt, die ich habe, muss ich noch etwas ändern, um dies zu replizieren? –

+0

@Gin_Salmon alles bis einschließlich der 'gsub' Zeile ist nur ich die Daten in meine Umgebung, wie aus den Daten, die Sie zur Verfügung gestellt haben.Die Zeile "solarX [, date: = ...]" ist die einzige Zeile, die ** Sie ** brauchen sollte – SymbolixAU

Verwandte Themen