如何转换类似时间戳的格式成为R中的时间戳?

时间:2018-03-01 01:58:23

标签: r

我有一个.csv格式的数据集。此数据包含类似时间戳的格式:

> head(HC_40,n=10)
          obs_id   SiteId  Timestamp       ForecastId           Value
   937757 5338068     40 03/07/2015 14:30       1002  6.997.984.367.355.440
   937758 3210822     40 03/07/2015 15:30       1002 15.518.012.898.186.300
   937759  412101     40 03/07/2015 16:30       1002  6.674.491.990.937.700
   937760 1284142     40 03/07/2015 17:30       1002  4.920.282.615.641.480
   937761 1083737     40 03/07/2015 18:30       1002  4.118.787.012.290.970
   937762 4835789     40 03/07/2015 19:30       1002 17.199.203.354.454.000
   937763 6108559     40 03/07/2015 20:30       1002 11.584.402.269.325.700
   937764 5609878     40 03/07/2015 21:30       1002 14.093.340.266.945.500
   937765 3869294     40 03/07/2015 22:30       1002  6.063.987.507.173.930
   937766 3517578     40 03/07/2015 23:30       1002 80.017.658.455.307.200

但是,当我检查类型时,它是一个整数。这有什么解释吗?

> sapply(HC_40,typeof)
    obs_id     SiteId  Timestamp ForecastId      Value 
   "integer"  "integer"  "integer"  "integer"  "integer"

如何将此格式转换为时间戳?

我尝试过但失败了:

first--->dataTime<-as.Date.POSIXct(HC_40$Timestamp,format="%d/%m/%Y %H:%M")
second-->HC_40$Timestamp = as.Date(strptime(as.character(HC_40$Timestamp), "%d/%m/%Y/ %H:%M"))

它实际上不起作用,我的数据变为

> HC_40$Timestamp<-as.POSIXct(HC_40$Timestamp,format="%d/%m/%Y %H:%M")
> head(HC_40,n=10)
        obs_id SiteId           Timestamp ForecastId                  Value
937757 5338068     40 1970-01-01 07:00:00       1002  6.997.984.367.355.440
937758 3210822     40 1970-01-01 07:00:00       1002 15.518.012.898.186.300
937759  412101     40 1970-01-01 07:00:00       1002  6.674.491.990.937.700
937760 1284142     40 1970-01-01 07:00:00       1002  4.920.282.615.641.480
937761 1083737     40 1970-01-01 07:00:00       1002  4.118.787.012.290.970
937762 4835789     40 1970-01-01 07:00:00       1002 17.199.203.354.454.000
937763 6108559     40 1970-01-01 07:00:00       1002 11.584.402.269.325.700
937764 5609878     40 1970-01-01 07:00:00       1002 14.093.340.266.945.500
937765 3869294     40 1970-01-01 07:00:00       1002  6.063.987.507.173.930
937766 3517578     40 1970-01-01 07:00:00       1002 80.017.658.455.307.200

2 个答案:

答案 0 :(得分:1)

您的数据输入过程可能会将它们作为因子变量导入,这些变量是整数类型变量。这也说明了为什么n typeof是调查R对象结构的不好方法。请改为使用strclass

所以,可能:

HC_40$Timestamp <- as.POSIXct(as.character(HC_40$Timestamp), # convert from factor
                              format = "%d/%m/%Y %H:%M")

不幸的是,在日期结束时使用年份值存储日期时间的格式并不适合将colClasses与其中一个read。*函数一起使用。他们需要作为字符或因素阅读,并使用as.POSIXctstrptime进行转换。

答案 1 :(得分:0)

解决方案应该像

一样简单
HC_40$Timestamp <- as.POSIXct(HC_40$Timestamp, format = "%d/%m/%Y %H:%M")