【问题标题】:R: extract the latest revisionTime for each dateR:提取每个日期的最新修订时间
【发布时间】:2017-02-13 10:55:33
【问题描述】:

我有一个包含 3 列的修订数据框:

  1. 修订时间
  2. 日期
  3. 价值

例如这里是一个示例,但我的非常非常长(几十万行)

df = structure(list(revisionTime = structure(c(1471417781, 1471417781, 
1471417781, 1473978576, 1473978576, 1473978576), class = c("POSIXct", 
"POSIXt"), tzone = ""), date = structure(c(1464652800, 1467244800, 
1469923200, 1456704000, 1467244800, 1472601600), class = c("POSIXct", 
"POSIXt"), tzone = ""), value = c(103.7, 104.1, 104.9, 104.414, 
104.3, 104.4)), .Names = c("revisionTime", "date", "value"), row.names = 536:541, class = "data.frame")

我需要的是一种非常快速的方法,可以从这个 data.frame 中提取每个日期的最新修订时间(以及相应的值)。有一些类似的问题,但我的问题更准确:有没有办法避免循环

谢谢

【问题讨论】:

    标签: r loops date dataframe revision


    【解决方案1】:

    我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),转换为Date类后按'date'分组,order'revisionTime'按降序排列(在i中)并得到第一行是head

    library(data.table)
    setDT(df1)[order(-revisionTime), head(.SD, 1), .(date = as.Date(date))]
    

    【讨论】:

    • 不会df%>%group_by(date)%>%summarise(lastrevisionTime=last(revisionTime)) from dplyrwork?
    • @Haboryme 在这里,你假设 revisionTime 是有序的,你可能需要arrange
    【解决方案2】:

    如果您的 revisionTime 格式正确 (Y-m-d H:M:S) 始终如您的示例所示,您可能根本不需要转换为 Date 时间,这应该很简单:

    aggregate(revisionTime ~ date, df, max)
    

    【讨论】:

    • 谢谢。我想我已经到plyr::join这2个data.frames来获取对应的值了?
    • 你也有第二个数据框吗?
    • 好吧,当我再次阅读我的问题时,我的错误:我实际上需要与最新修订时间相对应的the value,因此我误解了您的答案。
    • max 将为您提供每个日期的最新修订时间。
    • 确实如此。然后我可以与原始data.frame合并或加入以获得相应的值。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多