2016-07-18 4 views
0

Iは、以下のようなデータフレーム(alter.hh2)を有するの値に基づいて、現在の行に他の行の値を追加:R:別の列

 wk   hh   brd  count  flavor mean_multi h_size 
    1 W52  1213  546  1   PEACH 2.11   2 
    2 W52  4493  546  1   BBA  1.63   2 
    5 W53  2093  5367  4   PEA  2.12   2 
    6 W53  2043  5366  5   RBYA  1.93   1 
    9 W53  2093  546  8   VANI  1.78   2 

と行ごとに、私は、値を追加します(異なる値であれば)、mean_multi、及びBRD、それに同じ週の、のような風味の各列にそのまま残りの値を維持したまま次

wk  hh  brd count flavor mean_multi h_size flavor2 brd2 mean_multi2 
W52 1213 546 1  PEACH 2.11  2  BBA  546 1.63 
W52 4493 546 1  BBA  1.63  2  PEACH 546 2.11 
W53 2093 5367 4  PEA  2.12  2  RBYA 5367 1.93 
W53 2043 5366 5  RBYA  1.93  1  PEA  5366 2.12 

各週の2つの以上の値がある場合結果は次のように(反復的に)欲しい:

wk hh brd count flavor mean_multi h_size flavor2 brd2 mean_multi2 flavor3 brd3 mean_multi3 
    W53 2093 5367 4  PEA 2.12  2 RBYA 5366 1.93   VANI 546 1.78 
    W53 2043 5366 5  RBYA 1.93  1 PEA 5367 2.12   VANI 546 1.78 
    W53 2093 546 8  VANI 1.78  2 PEA 5367 2.12   RBYA 5366 1.93 

は、私はしかし、パッケージを再構築、次のコードを使用して試してみましたが、それは私に望ましい結果を与えていないことが表示されます:

w <- reshape(alter.hh2, 
     timevar = c("flavor","wk"), 
     idvar = c("count", "hh"), 
     direction = "wide")  

なり大幅に任意の洞察力を!

+0

申し訳ありません。私に希望の結果を与えないでください – lll

+0

カウントはちょうど各hhによって作られた購入カウントです。 – lll

+0

"flavor"、 "mean_multi"、および "brd"の2番目の行の値を最初の行のいくつかの新しい列の値にし、2番目の行に対して同じことをしたいだけです。このプロセスを毎週繰り返します。 – lll

答えて

0

data.tableを使用できます。 wk( 'nm1')ごとに異なる値がある場合は、追加する必要のある列名を取得します(つまり、「brd」、「flavor」、「mean_multi」)。 'data.frame'を 'data.table'(setDT(alter.hh2))に 'hh'でグループ化し、最初の行(head(.SD, 1))を選択して 'wk'でグループ化し、.SDcolsを指定して列をループします。.SDcolsその逆を取得して、出力を新しい列に割り当てます(:=)。

library(data.table) 
nm1 <- names(alter.hh2)[c(3, 5, 6)] 
setDT(alter.hh2)[,head(.SD, 1) , hh][, paste0(nm1, 2) := lapply(.SD, rev), 
      by = wk, .SDcols = nm1][] 
#  hh wk brd count flavor mean_multi h_size brd2 flavor2 mean_multi2 
#1: 1213 W52 546  1 PEACH  2.11  2 546  BBA  1.63 
#2: 4493 W52 546  1 BBA  1.63  2 546 PEACH  2.11 
#3: 2093 W53 5367  4 PEA  2.12  2 5367  PEA  2.12 
#4: 2043 W53 5366  5 RBYA  1.93  1 5366 RBYA  1.93 
+0

私は自分のデータでこれを試しましたが、2つの値にしかなりません。各行に5つの値があるので、これに対応するために上記のコードをどのように調整すべきかと思います。 – lll

+0

@lll 2番目の更新がカウント値4,5、および8を持ち、入力例の1と1が表示されないので、再現可能な例で投稿を更新してください。 – akrun

関連する問題