2017-11-20 5 views
0

私は41040 obsの大きなデータフレームを持っています。 20変数。 ここでは模擬データセットを簡略化し、質問を理解しやすくします。複雑で大規模なデータフレームの再構成

私が持っているもの:私はこのことから欲しい

rm(list = ls()) 

variable <- rep(c('var1', 'var1_2', 'var1_3', 'var1_4'), 5) 
group <- as.factor(rep(c('county1', 'county2', 'county3', 'county4'), 5)) 
year <- rep(c(2000:2004), 4) 
month <- c(rep(1:12, 1), 1:8) 

value1 <- sample(1:10000, 20) 
value2 <- sample(1:10000, 20) 
value3 <- sample(1:10000, 20) 


mydata <- data.frame(variable, group, year, month, value1, value2, value3) 

head(mydata) 

    variable group year month value1 value2 value3 
1  var1 county1 2000  1 4848 4759 6029 
2 var1_2 county2 2001  2 7624 3486 6745 
3 var1_3 county3 2002  3 4612 9155 4266 
4 var1_4 county4 2003  4 1496 2420 9451 
5  var1 county1 2004  5 6739 4312 5577 
6 var1_2 county2 2000  6 5127 5030 5479 

何、値は郡、数年あるいは数ヶ月間でめちゃめちゃにされることはありません別のdata.frameを取得しているが、各列から一つの変数を表します可変列。明確にするために、同じ例で、私はこれを取得する最も簡単な方法を探しています:county1、2000年と月1のすべての値が書き込まれた後

var1 <- c(t(mydata[1, 5:7])) 
var1_2 <- c(t(mydata[2, 5:7])) 
var1_3 <- c(t(mydata[3, 5:7])) 
var1_4 <- c(t(mydata[4, 5:7])) 

group2 <- rep('county1', 3) 
year2 <- rep(2000, 3) 
month2 <- rep(1, 3) 

mydata2 <- data.frame(group2, year2, month2, var1, var1_2, var1_3, var1_4) 

head(mydata2) 

group2 year2 month2 var1 var1_2 var1_3 var1_4 
county1 2000  1 4848 7624 4612 1496 
county1 2000  1 4759 3486 9155 2420 
county1 2000  1 6029 6745 4266 9451 

を、私はそれが月2に行きたい、2000年county1、month 3など。すべての月が終わった後、私はcounty1などに対して2001年を望み、county2に移動します。

melt(), dcast(), stack(), unstack(), gather() and spread()でさまざまな方法を試してみましたが、成功しませんでした。

答えて

0

私はそれをしましたが、上品ではありません。最初の4つの変数を選択し、キャストする必要がある以下の変数を交互に使用して、元のdata.frameを新しいdata.framesに分割しました。このように:私は列ごとにこれをした後

res <- select(mydata, c(1:4, 5)) # i changed this 5 to 6, than to 7 etc. 
base <- dcast(res, group + year + month ~ variable, value.var = 'value1') 

、私は新しい、キャストのデータフレームを作成するためにCBINDを使用:

cbind(base, var1_2[ , 5:14], var1_3[ , 6:14]) 

それは動作しますが、私はまだへのよりよい方法を見たいのですが、これを1行または2行で自動的に行います。

関連する問題