2016-06-30 7 views
0

データを長形に再整形しました。 1つの列に基づいて昇順にソートされています(以下の再現可能な例ではx2)、データを因数分解するのではなく繰り返して保存します。再構成されたデータから繰り返しデータセットを整理する

set.seed(234) 
data<-data.frame(x1=c(1:12),x2=rep(1:3,each=4),x3=runif(12,min=0,max=12)) 

そして、私はこのような形式の何かをしたい:ここではサンプルです

x1 x2  x3 
1 1 1 6.115445 
2 2 2 5.157014 
3 3 3 4.793458 
4 4 1 9.998710 
5 5 2 2.620250 
6 6 3 1.825839 
7 7 1 5.842854 
8 8 2 5.616670 
9 9 3 6.511315 
10 10 1 9.164444 
11 11 2 8.401418 

を長い形式にデータを変換しながら、あなたはmelt機能に含めるのいずれか何で私を助けてくださいすることができたりそのデータを並べ替える際に使用すべき他の関数。

ノート
上記の結果は希望の形式ではなく、私のデータの正確な解決策を示すことです。

EDIT:ここに は私の実際のデータのhead()です:実際のデータで

 Date stn Elev Amount 
1 2010-01-01 11 0 268.945 
2 2010-01-01 11 0 268.396 
3 2010-01-01 11 0 267.512 
4 2010-01-01 11 0 266.488 
5 2010-01-01 11 0 265.558 
6 2010-01-01 11 0 265.178 

、列Elevc("0","100","250","500"...)、のような値が含まれています。だから、100250用など0は、上記のサンプルのx21と等価であることを前提とし、かつ....

答えて

1

一つの方法は、次のようにaveを使用することです:

data[order(ave(data$x3, data$x2, FUN=function(i) 1:length(i)), data$x2),] 
    x1 x2   x3 
1 1 1 8.9474400 
5 5 2 0.8029211 
9 9 3 11.1328381 
2 2 1 9.3805491 
6 6 2 7.7375415 
10 10 3 3.4107614 
3 3 1 0.2404454 
7 7 2 11.1526315 
11 11 3 6.6686992 
4 4 1 9.3130246 
8 8 2 8.6117063 
12 12 3 6.5724198 

この例ではaveは、データ$ x2で実行カウントを計算します。このカウントは、order関数を使用してデータをソートするために使用されます。

希望する場合は、x1の番号を再付与することもできます。data$x1 <- 1:nrow(data)は、希望する結果を返します。

+0

@ G1124Eこれをあなたの質問に追加することをお勧めします。それはコメントとして読むことがすべてではありません。 – lmo

+0

日付変数が要素として読み込まれました。 'read.csv'または' read.table'の中でas.is = TRUE引数を使うべきです。これは、変数が数値か文字かを保証します。また、日付ではなく 'ave'への最初のエントリとしてstnを使います。 – lmo

+0

@Imoはい、あなたの最後のコメントが機能しました。どうもありがとうございました。 – G1124E