R中的循环中的日期转换

时间:2018-09-05 13:44:24

标签: r datetime as.date

你好,再次stackoverflow。我在R代码的双循环中转换从Excel导入的日期的列时,在R代码中再次遇到问题。以下代码是我编写的,用于转换数据(从整个数据的第11列到第19列)设置,列长为17)。

for (m in  11:19) {
  for (i in 1:17) {
    if (is.POSIXct(data_agg[[i,m]])) {
      data_01 <-  as.Date(data_agg[[i,m]])
      data_agg[[i,m]] <- data_01
    }
    else if (grepl("^[[:digit:]]+$",data_agg[[i,m]])) {
      data_02 <-  as.Date(as.numeric(data_agg[[i,m]]),origin="1899-12-30")
      data_agg[[i,m]] <- data_02
    }
  }
}

我想将两种类型的数据转换为正确的日期格式。一种是“ POSIXct”,一种是“字符”。对于“ POSIXct”类型的数据,原始数据如下所示(以第11列为例):

data_agg[[11]]
 [1] "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-16 UTC" "2018-03-12 UTC"
[10] "2017-07-20 UTC" "2018-06-07 UTC" "2018-03-15 UTC" "2018-03-06 UTC" "2017-10-19 UTC" NA               NA               NA   

str(data_agg[[11]])
     POSIXct[1:17], format: "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-12" "2017-07-20" "2018-06-07" ... 

为了转换为正确的格式,我使用as.Date并将其存储在伪变量data_01中,并使用该伪变量重新分配原始值。

对于“字符”类型的数据,原始数据如下所示(以数据集的第12列为例):

data_agg[[12]]
 [1] "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "Yes"   "Yes"   "N/A"   NA      NA      "43045" NA      NA      NA 

str(data_agg[[12]])
 chr [1:17] "N/A" "N/A" "N/A" "N/A" "N/A" "N/A" "N/A" "N/A" "Yes" "Yes" "N/A" NA NA "43045" NA NA NA

由于我只对数字“ 43045”感兴趣,并将其转换回日期格式,所以我使用了

(grepl("^[[:digit:]]+$",data_agg[[i,m]]))

查看字符串中是否包含任何数字,如果是,请将其转换回以下代码中表示的正常日期格式:

else if (grepl("^[[:digit:]]+$",data_agg[[i,m]])) {
      data_02 <-  as.Date(as.numeric(data_agg[[i,m]]),origin="1899-12-30")
      data_agg[[i,m]] <- data_02

因此,我运行了嵌套循环,但结果与预期的相差甚远。数据集中的第11列变为以下内容:

data_agg[[11]]
 [1] "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC"
 [7] "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:26 UTC" "1970-01-01 04:53:22 UTC" "1970-01-01 04:49:27 UTC" "1970-01-01 04:54:49 UTC" "1970-01-01 04:53:25 UTC"
[13] "1970-01-01 04:53:16 UTC" "1970-01-01 04:50:58 UTC" NA                        NA                        NA

它应该给了我

的结果
"2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-16" "2018-03-12"
[10] "2017-07-20" "2018-06-07" "2018-03-15" "2018-03-06" "2017-10-19" NA               NA               NA

数据集的第12列变为以下内容:

data_agg[[12]]
 [1] "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "Yes"   "Yes"   "N/A"   NA      NA      "17476" NA      NA      NA 

它应该给我以下结果:

 [1] "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "N/A"   "Yes"   "Yes"   "N/A"   NA      NA      "2017-11-06" NA      NA      NA 

我在这里想念什么?非常感谢您的帮助!

0 个答案:

没有答案