Rでワイド形式とロング形式の間でデータを変更するにはどうすればよいですか?[閉まっている]


32

データはワイド形式またはロング形式で保存できます。使用可能なメソッドは形式によって異なるため、これは非常に重要なことです。reshapeパッケージを使用したり、パッケージを変更しmelt()たりする必要があることは承知していますが、理解できないことがcast()いくつかあります。

誰かがこれをどのように行うのか簡単な概要を教えてもらえますか?


達成したい例を提供してください。正確に何が得られないのですか?
mpiktas

3
ここに私のブログ投稿との使用例がmeltありcastます。ワイド形式からロング形式への変換は1段階で行われます。本当に特別なものはありません。
mpiktas

統計へようこそ。質問に小さな再現可能なデータセットを含めて、必要なものを説明すると役立つ場合があります。詳細についてはsigmafield.org / 2011/01/18 / ...をお読みください。
-PaulHurleyuk

これを行う多くの方法については、このSOの質問を参照してください。
アックスマン

回答:


26

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

reshape2melt()acast()andのdcast()ペアリングには、実際には2つの主要な機能しかありません。これら2つの機能のヘルプページの例をご覧ください。HadleyのWebサイト(上記のリンク)を参照し、私が言及した論文をご覧ください。これで開始できます。

また、Hadleyのplyrパッケージを調べることもできます。Hadleyのパッケージは、似たようなことをreshape2しますが、さらに多くのことを行うように設計されています。


dcast(aqm, month ~ variable)、集約関数なしでこれは何をしますか?
qed

@CravingSpiritは、各変数の観測数を返します。?dcastどちらがあなたにこれを伝えたかを読んでください(引数についての詳細を参照fun.aggregate
モニカの復活-G.シンプソン


7

meltとを使用する必要はありませんcast

データの形状変更は、さまざまな方法で実行できます。あなたの特定の例では、recastwith を使用すること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必要に応じてどのように機能し、独自の関数を書くことができるかを簡単に確認できます。



2

data.tableここでは、より効率的で広範な再形成方法への参照がないことに気付いたので、同様の質問に対するStackOverflowのZach / Arunによる優れた回答をコメントなしで投稿しています。

https://stackoverflow.com/questions/6902087/proper-fastest-way-to-reshape-a-data-table/6913151#6913151

特に、data.tableGitHubページには素晴らしいビネットがあります。

https://github.com/Rdatatable/data.table/wiki/Getting-started

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.