2017-03-20 17 views
0

メルト機能を持つデータを整形:私は(「anscombe.txt」)のデータを持っている。例えば

case x1 x2 x3 x4 y1 y2 y3 y4 
1: 1 10 10 10 8 8.04 9.14 7.46 6.58 
2: 2 8 8 8 8 6.95 8.14 6.77 5.76 
3: 3 13 13 13 8 7.58 8.74 12.74 7.71 
4: 4 9 9 9 8 8.81 8.77 7.11 8.84 
5: 5 11 11 11 8 8.33 9.26 7.81 8.47 
6: 6 14 14 14 8 9.96 8.10 8.84 7.04 
7: 7 6 6 6 8 7.24 6.13 6.08 5.25 
8: 8 4 4 4 19 4.26 3.10 5.39 12.50 
9: 9 12 12 12 8 10.84 9.13 8.15 5.56 
10: 10 7 7 7 8 4.82 7.26 6.42 7.91 
11: 11 5 5 5 8 5.68 4.74 5.73 6.89 

私は、次の方法でそれらを再構築したい:

x1 variable value 
1: 10  y1 8.04 
2: 8  y1 6.95 
3: 13  y1 7.58 
4: 9  y1 8.81 
5: 11  y1 8.33 
6: 14  y1 9.96 
7: 6  y1 7.24 
8: 4  y1 4.26 
9: 12  y1 10.84 
    ...   ...... 
34: 8  y4 6.58 
35: 8  y4 5.76 
36: 8  y4 7.71 
37: 8  y4 8.84 
38: 8  y4 8.47 
39: 8  y4 7.04 
40: 19  y4 5.25 
41: 8  y4 12.50 
42: 8  y4 5.56 
43: 8  y4 7.91 
44: 8  y4 6.89 

ので、その列x1はc(x1、x2、x3、x4)と等しく、値はc(y1、y2、y3、y4)と等しくなります。

メルト関数)?私が見たいと望んでいないされてX1のansc_new <- melt(anscombe,id.vars = 'x1',measure.vars = c('y1','y2','y3','y4'))

しかし、最後の11値:

は、私はこれを試してみました。

+0

それはdata.tableからでなければなりませんか? –

+0

@JulianCienfuegos理想的にはそうです。しかし、それをdata.tableとして保持する権利がない場合、他のバリアントも受け入れることができます。 –

+0

別の 'x1'カラムの理由はありますか?次に何をしようとしているかによって、2つの列だけで簡単に(より普通に)変形することができるので、x1-x4も 'variable'列に入ります。 – neilfws

答えて

0

私はあなたがdata.tableからlapplyrbindlistを使用して欲しいものを得ることができると信じて:

l<-lapply(1:4,function(z){ 
    melt(anscombe,id.vars = paste0("x",z),,measure.vars = paste0("y",z)) 
}) 
rbindlist(l) 
0

dplyrtidyrの解はxとyの変数を別々に集め、それらを再び結合します。私はあなたが別のx1列が必要かどうか検討したいと思います:xとyの両方のラベルを変数列に集めるほうが簡単かもしれません。

library(dplyr) 
library(tidyr) 

anscombe %>% 
    gather(variable.x, value, -y1, -y2, -y3, -y4) %>% 
    select(variable.x = value) %>% 
    bind_cols(gather(anscombe, variable, value, -x1, -x2, -x3, -x4)) %>% 
    select(x1 = variable.x, variable, value) 
関連する問題