2016-05-11 3 views
2

У меня есть некоторые данные, которые класс символов:Проблем, связанные с созданием нового столбца в DataTable с помощью strptime

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

Который выглядит следующим образом:

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" 

Однако, я не хочу в формате символов и должны иметь доступ к части времени и минут времени.

Что я попытался это:

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

Который прекрасно работает, это дает мне:

[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" 

Однако, когда я иду, чтобы увеличить свою исходную таблицу данных, выполнив:

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

(solarX - мой стол данных)

я получаю следующее предупреждение:

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) 

И таблица данных возвращается выглядит ужасно:

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, 

Очевидно, что я не хочу в колонке «дата», чтобы выглядеть, а он был полностью заполнен со значениями, полученными из исходной функции strptime.

+0

'solarX [, дата: = strptime (MEASDATE, "% д /% м /% Y% H:% M") ] ' – HubertL

+0

удалите' solarX' внутри 'strptime' – SymbolixAU

+0

да, что @HubertL сказал. – SymbolixAU

ответ

1

Вы не можете использовать POSIXlt в data.table, использовать вместо POSIXct:

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

Я не вижу, как вы получили этот результат. Помимо вашего gsub с «_», который приводит к тому же столбцу MEASDATE, который у меня есть, мне нужно изменить что-нибудь еще, чтобы его реплицировать? –

+0

@Gin_Salmon все, вплоть до строки 'gsub', это только то, что я получаю данные в свою среду, взятые из данных, которые вы предоставили.Строка 'solarX [, date: = ...]' является единственной строкой, в которой вы должны ** нуждаться – SymbolixAU

 Смежные вопросы

  • Нет связанных вопросов^_^