2016-07-14 6 views
1

長年の読者と初めてのポスターで、これがどういうものになるかを見てみましょう...Rの係数に基づいて列の値を複数の列に分割するにはどうすればよいですか?

私はRでさまざまな医療機関に基づいて異なる薬物の平均ポケットコストの要約を作成しています。データには、私は製品(4)より多くの企業(〜5000)があります。私は、以下に示すように、製品と医療提供者によってポケット費用のうちを集約することにより、オフを開始するために知っている:(私は実際のデータを投稿することができない機密性の理由から注意が、持っている:

avgdf <- aggregate(price ~ company + product, data= df, mean) 
colnames(avgdf) <- c("company", "prod", "avg_price") 

結果のデータフレームは、このようになります。 )一般的な例を示すため

company prod avg_price 
A  1  88 
A  2  63 
A  3  46 
B  1  55 
C  2  8 
D  1  67 
D  2  42 
D  3  40 
D  4  61 
E  1  13 
E  2  17 
F  1  85 
F  4  17 

Iはprod列が4列、各製品ごとに1つに分割され、これら4列の値が記載に充填されるように、データフレームを変換しますその会社の製品のペアに。言い換えれば、私は、テーブルは次のようになりたい:

company prod1.avg_price prod2.avg_price prod3.avg_price prod4.avg_price 
A  88    63    46    NA 
B  55    NA    NA    NA 
C  NA    2    NA    NA 
D  67    42    40    61 
E  13    17    NA    NA 
F  85    NA    NA    17 

私の例であるように私は私のデータセット内にできるだけ多くNAのを持っていないはずですが、私はそれを扱うことができるソリューションを求めています。私の推測では、reshape2meltdcast関数を使用していますが、実装方法はわかりません。ヘルプのために事前にありがとう!

+0

、 'avgdf%>%変異(PROD = paste0( 'PROD'、PROD、 '.avg_price'))%>%スプレッド(PROD、avg_price)' – alistaire

答えて

1

dcastdata.tableから「ワイド」形式に変更することができます。 dplyrとtidyrで

library(data.table) 
dcast(setDT(avgdf), company~paste0("prod", prod, ".avg_price"), value.var = "avg_price") 
# company prod1.avg_price prod2.avg_price prod3.avg_price prod4.avg_price 
#1:  A    88    63    46    NA 
#2:  B    55    NA    NA    NA 
#3:  C    NA    8    NA    NA 
#4:  D    67    42    40    61 
#5:  E    13    17    NA    NA 
#6:  F    85    NA    NA    17 
関連する問題