[英]Manipulating time series data in R
在R
操作以下類型的時間序列數據的好方法是什么:
username;variable;2012-01-01;2012-01-15;2012-02-01;2012-03-01;2012-04-01;2012-05-01;2012-07-02
user1;var1;5;5;5;5;6;6;6
user1;var2;0;0;1;0;0;1;1
user1;var3;9;9;9;9;9;9;9
user2;var1;4;4;4;4;4;6;6
user2;var2;0;0;1;1;1;1;1
user2;var3;4;4;4;9;9;9;9
數據包含每個受監視用戶的一組時間序列。 我的目標是使數據具有某種格式,以便我可以輕松地對此數據集查詢“增量”。 也就是說,從某個時間點開始,我可以回顧並計算某個變量在多久之前發生更改,並且還可以從該查詢中獲取原始值和新值。
僅將日期和變量名作為參數的函數將是完美的,例如fun(2012-07-02, var1)
, fun(2012-02-17, var1)
或fun(2014-09-02, var1)
將返回四列: username,original_value;new_value;days_since_change
。
是否有R
包或代碼段可以執行類似的操作?
這是如何以易於使用的格式轉換表格的方法。 使用reshape2
軟件包並melt
數據的技巧。
my.table <-read.table(text="username;variable;2012-01-01;2012-01-15;2012-02-01;2012-03-01;2012-04-01;2012-05-01;2012-07-02
user1;var1;5;5;5;5;6;6;6
user1;var2;0;0;1;0;0;1;1
user1;var3;9;9;9;9;9;9;9
user2;var1;4;4;4;4;4;6;6
user2;var2;0;0;1;1;1;1;1
user2;var3;4;4;4;9;9;9;9",sep=";", header=TRUE)
library(reshape2)
res <-melt(my.table,id.vars=c("username","variable") ) #melt on the first two columns
colnames(res)[3] <-"Date"
res$Date <-as.Date(res$Date,format="X%Y.%m.%d") #transform into date format
out <-res[res$username=="user1" & res$variable=="var1",] #request user1 and var1
out
username variable Date value
1 user1 var1 2012-01-01 5
7 user1 var1 2012-01-15 5
13 user1 var1 2012-02-01 5
19 user1 var1 2012-03-01 5
25 user1 var1 2012-04-01 6
31 user1 var1 2012-05-01 6
37 user1 var1 2012-07-02 6
當您說original_value;new_value;days_since_change
時,我不明白您想要什么original_value;new_value;days_since_change
但是通過這種方式提取的數據,我相信您可以弄清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.