2015-11-03 39 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)。

相关问题