2015-11-03 40 views
0

下面是現有的數據:as.posixct返回一個數而不是日期和時間

existing data

我有數據的2列。第一列的每一行都有數據,而第二列的只有某些行有數據(其他是空白的)。我想借助as.POSIXct()來轉換數據的格式。對於我用下面的代碼的第一列(I命名該數據幀作爲「MRKT」):

mrkt[1]<-lapply(mrkt[1],as.POSIXct) 

這在現有的數據轉換爲合適的格式 用於第二列中的上述代碼而言工作良好將不起作用,as.POSIXct()不能解決「」值。所以我寫了一個循環代替:

for (i in 1:dim(mrkt[2])[1]){ 
    if (!as.character(mrkt[[2]][i])==""){ 
     mrkt$open_time[i]<-as.POSIXct(mrkt$open_time[i]) 
    } 
} 

但是,這給了我一個奇怪的輸出形式的數字。我怎樣才能避免這種情況?下面是輸出:

output

+0

請嘗試將您輸入並輸出到問題的文本中,而不是鏈接。鏈接可以被打破,然後你的問題對未來其他人的使用有限。 – Brody

回答

0

一個簡單的方法來做到這一點是要做到這一點:

library(plyr) 
library(dplyr) 

mrkt %>% 
    mutate(send_time = send_time %>% 
         as.POSIXct, 
     open_time = open_time %>% 
         mapvalues("", NA) %>% 
         as.POSIXct) 
0

這是由於隱含的類型轉換,從POSIXct爲數字。這隻發生在循環中,因爲矢量具有指定的類型,並且如果指定了單個值,則會將值轉換爲此類型。當整個矢量被替換時,將使用正確的類型創建一個新的矢量。

最簡單的解決方案是使用as.POSIXct(strptime(mrkt$open_time, format=yourformat)),格式正確,格式見?strptime。這是向量化的,strptime正確處理空字符串(返回NA)。

相關問題