【问题标题】:What is the R equivalent of pandas .resample() method?pandas .resample() 方法的 R 等效项是什么?
【发布时间】:2015-07-24 17:56:01
【问题描述】:

这是我找到的最近的链接:https://stats.stackexchange.com/questions/5305/how-to-re-sample-an-xts-time-series-in-r

但我没有看到任何关于聚合数据的不同方法(如均值、计数、匿名函数),您可以在 pandas 中执行这些方法。

对于我的程序,我试图每 2 分钟重新采样一次数据帧,并在每个间隔取 2 个值的平均值。谢谢!

【问题讨论】:

    标签: python r pandas


    【解决方案1】:

    如果您使用data.tablelubridate,它可能看起来像这样

    library(data.table)
    library(lubridate)
    #sample data
    dt<-data.table(ts=seq(from=ymd('2015-01-01'), to=ymd('2015-07-01'),by='mins'), datum=runif(260641,0,100))
    

    如果您想从分钟到每小时获取数据,您可以这样做

     dt[,mean(datum),by=floor_date(ts,"hour")]
    

    如果你有一堆列并且你希望所有的列都被平均,你可以这样做

    dt[,lapply(.SD,mean),by=floor_date(ts,"hour")]
    

    您可以将mean 替换为您想要的任何功能。您可以将“小时”替换为“秒”、“分钟”、“小时”、“日”、“周”、“月”、“年”。好吧,你不能从一分钟到几秒,因为那需要魔法,但无论如何你都可以从微秒到几秒。

    不可能将序列从较低的周期性转换为 更高的周期性 - 例如每周到每天或每天到 5 分钟的酒吧, 因为那需要魔法。

    -来自 xts 手册的 Jeffrey Ryan。

    我从来没有学过 xts,所以我不知道用 xts 对象做它的语法,但那条线很有名(或者至少和手册中的一条线一样有名)

    【讨论】:

    • 这看起来非常接近 - 有什么可以让它平均每 5 分钟一次(在 pandas 中,这只是在参数中执行“5 分钟”)。换句话说,取每 5 分钟的平均值,并生成一个时间序列,如 12:30pm、12:35pm、12:40pm 等?这是为了平滑数据。
    • 据我所知,没有内置的方法可以做到这一点,但您可以执行类似dt[,lapply(.SD,mean),by=minutes(floor(as.numeric(difftime(ts,ymd('1970-01-01'),units="mins"))/5)*5)+ymd('1970-01-01')] 之类的操作,您可以在其中找到自某个任意日期以来的分钟数除以您想要的任何范围,取将其乘以除以的相同的值,然后将其添加到相同的任意日期。
    • @AlexPetralia 这是否满足您的需求?如果是这样,您介意接受答案吗?
    【解决方案2】:

    我发现这个主题正在寻找与 pandas resample() 等效的 R,但用于 xts 对象。为了以防万一,我发布了一个解决方案,时间增量为 5 分钟,其中 ts 是一个 xts 对象:

    period.apply(ts, endpoints(ts, k=5, "minutes"), mean)
    

    【讨论】:

      【解决方案3】:

      你可以使用 reticulate 来利用 pandas 方法

      require(reticulate)
      pd <- import("pandas")
      
      df <- r_to_py(df) #Transform to Pandas DataFrame
      df = df$set_index(pd$DatetimeIndex(df['Date']))
      #df_meidan_hours=df$resample('1H', how='median', closed='left', label='left')
      df_meidan_hours=df$resample('1H',closed='left', label='left')$agg('median')
      df_meidan_hours <- py_to_r(df_meidan_hours) #Transform back to r's data.frame
      

      【讨论】:

        【解决方案4】:

        您查看过 R COIN 包吗?这是一个教程,可以帮助您确定这是否是您正在寻找的内容:http://www.statmethods.net/stats/resampling.html

        可以在此处找到有关该软件包的更多信息:https://cran.r-project.org/web/packages/coin/coin.pdf

        【讨论】:

        • 我不确定这是否与 python pandas 使用的“重采样”相同。这是统计重采样,我不认为 pandas 的“resample()”方法与此有任何关系——它只是碰巧有相同的名称。
        猜你喜欢
        • 1970-01-01
        • 2015-09-21
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多