データはワイド形式またはロング形式で保存できます。使用可能なメソッドは形式によって異なるため、これは非常に重要なことです。reshapeパッケージを使用したり、パッケージを変更しmelt()
たりする必要があることは承知していますが、理解できないことがcast()
いくつかあります。
誰かがこれをどのように行うのか簡単な概要を教えてもらえますか?
データはワイド形式またはロング形式で保存できます。使用可能なメソッドは形式によって異なるため、これは非常に重要なことです。reshapeパッケージを使用したり、パッケージを変更しmelt()
たりする必要があることは承知していますが、理解できないことがcast()
いくつかあります。
誰かがこれをどのように行うのか簡単な概要を教えてもらえますか?
回答:
Journal of Statistical Softwareのパッケージに関する論文へのリンクなど、Hadley Wickhamのパッケージに関するWebサイト(現在はreshape2
)にはいくつかのリソースがあります。
論文の簡単な例を次に示します。
> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
subject time age weight height
1 John Smith 1 33 90 1.87
2 Mary Smith 1 NA NA 1.54
データはワイド形式であることに注意してください。長い形式にするには、smiths
データフレームを溶融させます。
> melt(smiths)
Using subject as id variables
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
melt()
idとして変数の1つをどのように選択したかに注意してください。しかし、引数を介して使用するものを明示的に述べることができます'id'
。
> melt(smiths, id = "subject")
subject variable value
1 John Smith time 1.00
2 Mary Smith time 1.00
3 John Smith age 33.00
4 Mary Smith age NA
5 John Smith weight 90.00
6 Mary Smith weight NA
7 John Smith height 1.87
8 Mary Smith height 1.54
以下に別の例を示し?cast
ます。
#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)
溶融データフレームを保存すると、他の形式にキャストできます。reshape
(と呼ばれるreshape2
)の新しいバージョンには、それぞれ配列のような(配列、行列、ベクトル)結果またはデータフレームacast()
をdcast()
返す関数があります。また、これらの関数は集約関数(例mean()
)を使用して、データの概要を溶融形式で提供します。たとえば、上記の大気質の例に続いて、データセット内の変数の月平均値を幅広い形式で生成できます。
> dcast(aqm, month ~ variable, mean)
month ozone solar.r wind temp
1 5 23.61538 181.2963 11.622581 65.54839
2 6 29.44444 190.1667 10.266667 79.10000
3 7 59.11538 216.4839 8.941935 83.90323
4 8 59.96154 171.8571 8.793548 83.96774
5 9 31.44828 167.4333 10.180000 76.90000
reshape2
:melt()
とacast()
andのdcast()
ペアリングには、実際には2つの主要な機能しかありません。これら2つの機能のヘルプページの例をご覧ください。HadleyのWebサイト(上記のリンク)を参照し、私が言及した論文をご覧ください。これで開始できます。
また、Hadleyのplyr
パッケージを調べることもできます。Hadleyのパッケージは、似たようなことをreshape2
しますが、さらに多くのことを行うように設計されています。
dcast(aqm, month ~ variable)
、集約関数なしでこれは何をしますか?
?dcast
どちらがあなたにこれを伝えたかを読んでください(引数についての詳細を参照fun.aggregate
)
melt
とを使用する必要はありませんcast
。
データの形状変更は、さまざまな方法で実行できます。あなたの特定の例では、recast
with を使用することaggregate
は冗長でした。なぜならaggregate
、タスクはそれ自体でうまくいくからです。
aggregate(cbind(LPMVTUZ, LPMVTVC, LPMVTXC) ~ year, dtm, sum)
# or even briefer by first removing the columns you don't want to use
aggregate(. ~ year, dtm[,-2], sum)
あなたのブログ記事で、あなたが何melt
をしているのかを説明する方法が好きです。それを理解している人はほとんどいないので、一度それを見ると、cast
必要に応じてどのように機能し、独自の関数を書くことができるかを簡単に確認できます。
reshape2 wikiを参照してください。あなたが期待できるより多くの例を確実に提供します。
data.table
ここでは、より効率的で広範な再形成方法への参照がないことに気付いたので、同様の質問に対するStackOverflowのZach / Arunによる優れた回答をコメントなしで投稿しています。
特に、data.table
GitHubページには素晴らしいビネットがあります。
https://github.com/Rdatatable/data.table/wiki/Getting-started