0

で次のタイプの時系列データを操作するにはどうすればよいでしょうか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)4fun(2014-09-02, var1)つの列を返す関数は完璧ですusername,original_value;new_value;days_since_change

R似たようなことができるパッケージやコードはありますか?

4

1 に答える 1

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抽出されたデータなら、きっと分かってくれると思います。

于 2012-07-02T16:13:36.497 に答える