你好,再次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
我在这里想念什么?非常感谢您的帮助!