【发布时间】:2016-10-12 07:15:43
【问题描述】:
我已阅读 Combining date and time into a Date column for plotting 和其他相关解决方案,但找不到此问题的答案: 我有一个包含 7 个元素的字符串列表,其中前两个是日期和时间:
> head(IOlow)
[1] "20160928 142949 0.000172 0.000225 0.000015 0.000172 0.000765"
[2] "20160928 164105 0.000163 0.000227 0.000017 0.000163 0.000908"
[3] "20160928 172826 0.000176 0.000238 0.000017 0.000173 0.001604"
现在我想用包含 6 个元素的列表替换每个这样的字符串,其中第一个元素是从前两个数字构建的 DateTime 对象,其他元素是浮点数(而不是字符串)。所以我定义了这个辅助函数:
dateFormat <- "%Y%m%d %H%M%S"
function (x) {
x <- strsplit(x, split=" ")
w <- paste(x[[1]][1], x[[1]][2])
str(w)
x <- list(as.POSIXlt(w, format=dateFormat), as.double(x[[1]][3:7]))
}
(str(w) 仅用于调试)
像这样应用这个功能时
lapply(head(IOlow), to_numeric)
结果如下所示:
> lapply(head(IOlow), to_numeric)
chr "20160928 142949"
chr "20160928 164105"
chr "20160928 172826"
[[1]]
[[1]][[1]]
[1] "2016-09-28 14:29:49 CEST"
[[1]][[2]]
[1] 0.000172 0.000225 0.000015 0.000172 0.000765
[[2]]
[[2]][[1]]
[1] "2016-09-28 16:41:05 CEST"
[[2]][[2]]
[1] 0.000163 0.000227 0.000017 0.000163 0.000908
[[3]]
[[3]][[1]]
[1] "2016-09-28 17:28:26 CEST"
[[3]][[2]]
[1] 0.000176 0.000238 0.000017 0.000173 0.001604
由于我不明白的原因,R 似乎在列表中创建了额外的列表(我认为我无法返回向量,因为列表中有不同的数据类型)。 也许只是某些功能没有以我需要的方式记录,以了解真正发生的事情。
下一步将从列表列表中构建一个 data.frame。
我做错了什么,我该如何正确做?
系统信息:
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C
[5] LC_TIME=German_Germany.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.3.1
【问题讨论】:
-
您需要使用
POSIXlt吗?它在内部将事物存储为列表(可以是好的也可以是坏的)。由于各种原因,我倾向于更多地使用POSIXct。 -
为了消除一些混乱,您能否提供所需的输出?据我了解,最后您希望看到一个包含 6 列的数据框,例如 1 列用于日期,5 列用于数据?通过设计将您的输入直接转换为数据框的函数,如何完全跳过所有这些“列表混乱”?
-
实际上直到你的帖子我真的不知道
POSIXct和POSIXlt之间的区别是什么(谢谢!)。也许可以改进文档。关于输出格式:第一个列表元素应该是可以被绘图使用的东西,并以人类可读的格式显示为以后处理的日期和/或时间(其余的元素是可处理的数字)。够清楚吗?我愿意接受任何优雅的解决方案(因为我还在学习 R)!
标签: r type-conversion