【问题标题】:lapply as.POSIXct to a specific colum of multiple dataframeslapply as.POSIXct 到多个数据帧的特定列
【发布时间】: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 &lt;- as.POSIXct(...; x})
  • 感谢您的建议!不幸的是,它不起作用,我收到错误说“无法分配大小为 62.5Mb 的向量”,并且在总结过程中出现同样的错误,大小为 90.3 Mb ......我没有提到它,但每个数据集都有数百万的观察结果。我还想问一下您对分配提出的第二个建议:您的意思是我的代码很好,只是应该分配?最后一位; x}我不认识。
  • 就是返回数据集。算法看起来不错。关于错误,您可能需要使用内存更大的系统

标签: r dataframe lapply posixct


【解决方案1】:

由于没有要复制的数据,因此不确定如何完全回答您的问题。但你可以试试:

lapply(Datasets, function(x) as.POSIXct(x$Datetime, format = "%Y-%m-%d %H:%M:%S", tz="America/Edmonton")

这在没有指定类类型的情况下有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2020-02-18
    • 2018-06-08
    • 2021-08-19
    相关资源
    最近更新 更多