R速成指南-時間序列重採樣

R速成指南-時間序列重採樣

歡迎關注天善智能,我們是專注於商業智能BI,人工智能AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

對商業智能BI、大數據分析挖掘、機器學習,python,R等數據領域感興趣的同學加微信:tstoutiao,邀請你進入數據愛好者交流群,數據愛好者們都在這兒。

作者: Frank R語言中文社區專欄作者

知乎專欄:https://www.zhihu.com/people/chen-xiao-tian-92-92/activities

前言

在研究時間序列時,經常要按特定時間長度對數據進行重新劃分並進行分組計算,稱為時間序列重採樣。例如按分鐘、小時、日、月、年進行劃分,並分組計算數據情況。

下面分兩種情況:

  • 只要分組的結果
  • 要分組後計算數據(例如把分鐘值換算成小時值)

假設你的數據集名為data,時間那一列名為date(時間數據格式必須是POSIXt或者date)。

1、把數據歸類到特定時間長度的區間中。單純的歸類,比如按每個周歸類。

先用cut函數劃分時間區間,再用dlply函數彙總結果即可,語句是:

dlply(data,.(cut(date,"1 week")),"[") 

cut函數可用於按時間段給數據分類,用法也十分簡單:cut(時間列的名稱, 時間間隔)。

“時間間隔”寫法很簡單粗暴,一週你就寫"1 week"(注意加英文引號), 一年你就寫 "1 year"。

示例代碼(直接複製代碼到R中即可看到結果):

library(plyr)#載入plyr包
data"2010-01-1 03:02:38 UTC", "2010-01-4 03:03:14 UTC", "2010-01-6 03:05:52 UTC",
"2010-01-8 03:07:42 UTC", "2010-01-10 03:09:38 UTC", "2010-01-14 03:10:14 UTC",
"2010-01-16 03:12:52 UTC", "2010-01-18 03:13:42 UTC", "2010-01-20 03:15:42 UTC",
"2010-01-22 03:16:38 UTC", "2010-01-24 03:18:14 UTC", "2010-01-26 03:21:52 UTC",
"2010-01-27 03:22:42 UTC", "2010-01-28 03:24:19 UTC", "2010-01-30 03:25:19 UTC"
)), x = cumsum(runif(15)*10),y=cumsum(runif(15)*20))
dlply(data,.(cut(date,"1 week")),"[") #按周分類

2、按特定時間長度歸類並計算數據情況,比如計算每個周的平均值。

同樣先用cut函數劃分時間區間,再用aggregate函數分組計算平均數後彙總結果即可,語句是:

aggregate(. ~ cut(date, '1 week'), data, mean)

示例代碼(直接複製代碼到R中即可看到結果):

#同樣用到上一個例子中創建的data數據集做示範。
meanweekmeanweekmeanweek

關於cut.POSIXt函數的介紹詳見如下鏈接:

https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/cut.POSIXt

R速成指南-時間序列重採樣

回覆 爬蟲 爬蟲三大案例實戰

回覆 Python 1小時破冰入門

回覆 數據挖掘 R語言入門及數據挖掘

回覆 人工智能 三個月入門人工智能

回覆 數據分析師 數據分析師成長之路

回覆 機器學習 機器學習的商業應用

回覆 數據科學 數據科學實戰

回覆 常用算法 常用數據挖掘算法


分享到:


相關文章: