【发布时间】:2018-01-23 17:03:34
【问题描述】:
看来我一直无法正确使用lapply,我决定今天结束它。我确定我的问题是基本的,但我已经非常彻底地搜索了,以及参考文件,但找不到答案。
我有 4 个包含多列的数据框,其中一个包含当前存储为因子的日期和时间信息 (Datetime)(“2016-01-01 00:00:00”类型的数千个级别)
我可以使用以下方法轻松更改单个数据帧的格式:
df$Datetime<-as.POSIXct(strptime(as.character(df$Datetime), "%Y-%m-%d %H:%M:%S", tz="America/Edmonton"))
这是我尝试使用lapply 同时在所有数据帧上做同样的事情。
Datasets<-list(Data2017_1h, Data2016_1h, Data2017_15min, Data2016_15min)
Datasets<-lapply(Datasets, function(x){
as.POSIXct(strptime(as.character(x$Datetime), "%Y-%m-%d %H:%M:%S", tz="America/Edmonton"))
})
它的输出是一个长度为 4 的列表,每个元素的类型为“Double (S3:POSIXct, POSIXt)”。我丢失了所有其他变量(最初有 16 列),如果我尝试查看一个列表的一个元素,它会显示为 Double,而不是 POSIXct。
我很困惑,所以如果有任何见解,我将不胜感激。很抱歉,我没有可重复的示例,我的学习曲线还不够。
【问题讨论】:
-
尝试
lapply(Datasets, transform, Datetime = as.POSIXct(strptime(Datetime, "%Y-%m-%d %H:%M:%S", tz="America/Edmonton")))在您的代码中,应分配列,然后返回数据集,即{x$Datetime <- as.POSIXct(...; x}) -
感谢您的建议!不幸的是,它不起作用,我收到错误说“无法分配大小为 62.5Mb 的向量”,并且在总结过程中出现同样的错误,大小为 90.3 Mb ......我没有提到它,但每个数据集都有数百万的观察结果。我还想问一下您对分配提出的第二个建议:您的意思是我的代码很好,只是应该分配?最后一位
; x}我不认识。 -
就是返回数据集。算法看起来不错。关于错误,您可能需要使用内存更大的系统
标签: r dataframe lapply posixct