在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
个软件包或代码片段能够做类似的事情?
答案 0 :(得分:0)
以下是如何使用易于使用的格式转换表格。使用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
时,我不明白你想要什么,但是以这种方式提取数据,我相信你可以搞清楚。