首页 文章

使用R中的as.POSIXct格式化日期和时间

提问于
浏览
1

我正在尝试使用R中的as.POSIXct从我的文件“f845”格式化一列日期和时间(日期时间) . 文件845在格式化之前有21行要跳过,如下面第一行代码所示,它也有两列和100000行 .

当我尝试使用下面第二行代码格式化datetime列时,我最终得到输出,如第3行下面的数据所示 .

为什么我的代码没有正确格式化日期和时间?

> dat=read.table(f845,sep="\t",skip=21,col.names=c("datetime","light"))
> dat$datetime=as.POSIXct(strptime(dat$datetime,format="%d-%m-%Y %H:%M:%S", tz="UTC"))
> dat[1:10,]
   datetime  time
1      <NA> 4.542
2      <NA> 7.949
3      <NA> 5.678
4      <NA> 7.949
5      <NA> 7.949
6      <NA> 6.813
7      <NA> 2.271
8      <NA> 2.271
9      <NA> 2.271
10     <NA> 2.271

以下是格式化之前的数据:

> dat=read.table(f845,sep="\t",skip=21,col.names=c("datetime","light"))
> dat[1:10,]
              datetime light
1  21/05/2013 22:56:07 4.542
2  21/05/2013 23:01:07 7.949
3  21/05/2013 23:06:07 5.678
4  21/05/2013 23:11:07 7.949
5  21/05/2013 23:16:07 7.949
6  21/05/2013 23:21:07 6.813
7  21/05/2013 23:26:07 2.271
8  21/05/2013 23:31:07 2.271
9  21/05/2013 23:36:07 2.271
10 21/05/2013 23:41:07 2.271

编辑: dput(droplevels (dput(dat[1:10,])) 的输出如下所示,仍有大量日期,所以我只显示最后几行:

> dput(droplevels(dat[1:10,]))
structure(list(datetime = structure(1:10, .Label = c("21/05/2013 22:56:07", 
"21/05/2013 23:01:07", "21/05/2013 23:06:07", "21/05/2013 23:11:07", 
"21/05/2013 23:16:07", "21/05/2013 23:21:07", "21/05/2013 23:26:07", 
"21/05/2013 23:31:07", "21/05/2013 23:36:07", "21/05/2013 23:41:07"
), class = "factor"), light = c(4.542, 7.949, 5.678, 7.949, 7.949, 
6.813, 2.271, 2.271, 2.271, 2.271)), .Names = c("datetime", "light"
), row.names = c(NA, 10L), class = "data.frame")

1 回答

  • 1

    初始错误可能是由于在 format 中使用 - 而不是 / .

    dat <- read.table("D845.lux",sep="\t",skip=21,
            col.names=c("datetime","light"), stringsAsFactors=FALSE)
    
      dim(dat)
     #[1] 100247      2
    
      Datetime <- as.POSIXct(dat$datetime, format="%d/%m/%Y %H:%M:%S")
      head(Datetime)
      #[1] "2013-05-21 22:56:07 EDT" "2013-05-21 23:01:07 EDT"
      #[3] "2013-05-21 23:06:07 EDT" "2013-05-21 23:11:07 EDT"
      #[5] "2013-05-21 23:16:07 EDT" "2013-05-21 23:21:07 EDT"
    
      any(is.na(Datetime))
     #[1] FALSE
    

相关问题