R de geniş ve uzun formatlar arasında veri nasıl değiştirilir? [kapalı]


32

Verileri geniş formatta veya uzun formatta alabilirsiniz. Biçime bağlı olarak, kullanılabilir yöntemler farklı olduğundan, bu oldukça önemli bir şeydir. Çalışmak zorunda olduğunu biliyorummelt() ve cast()yeniden biçimlendirme paketinden ama alamadım bazı şeyler var gibi görünüyor.

Birisi bana bunu nasıl yaptığınız hakkında kısa bir bilgi verebilir mi?


Lütfen ne elde etmek istediğinizi örnek olarak verin. Tam olarak ne alamadın?
mpiktas

3
İşte benim blog yazısı kullanmanın örnekle meltve cast. Burada bir aşamada genişden uzun formata dönüşüm yapılır. Gerçekten daha özel bir şey yok.
mpiktas

İstatistiklere hoş geldiniz. Ne istediğinizi açıklamak için sorunuza küçük, yeniden üretilebilir bir veri kümesi eklemenize yardımcı olabilir. Daha fazla bilgi için sigmafield.org/2011/01/18/… adresini okuyun .
PaulHurleyuk

See this SO question for many ways to do this.
Axeman

Yanıtlar:


26

There are several resources on Hadley Wickham's website for the package (now called reshape2), including a link to a paper on the package in the Journal of Statistical Software.

Here is a brief example from the paper:

> 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

We note that the data are in the wide form. To go to the long form, we make the smiths data frame molten:

> 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

Notice how melt() chose one of the variables as the id, but we can state explicitly which to use via argument '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

İşte başka bir örnek ?cast:

#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)

Erimiş veri çerçevesini saklarsak , başka biçimlerde de olabiliriz. Yeni sürümde reshape(çağrılan reshape2) fonksiyonlar vardır acast()ve sırasıyla dcast()bir dizi benzeri (dizi, matris, vektör) sonuç veya bir veri çerçevesi döndürür. Bu fonksiyonlar ayrıca mean(), erimiş formdaki verilerin özetlerini sağlamak için bir toplama fonksiyonuna (örneğin ) sahiptir. Örneğin, yukarıdaki Hava Kalitesi örneğinden sonra, geniş bir biçimde, veri kümesindeki değişkenler için aylık ortalama değerler üretebiliriz:

> 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

Sadece iki ana fonksiyonları gerçekten vardır reshape2: melt()ve acast()vedcast() eşleştirme. Bu iki işlev için yardım sayfalarındaki örneklere bakın, Hadley'in web sitesine bakın (yukarıdaki bağlantı) ve bahsettiğim makaleye bakın. Bu seni başlatmalı.

You might also look into Hadley's plyr package which does similar things to reshape2 but is designed to do a whole lot more besides.


dcast(aqm, month ~ variable), what would this do without the aggregating function?
qed

@CravingSpirit it would return the number of observations for each variable. Read ?dcast which would have told you this (see the details for argument fun.aggregate).
Reinstate Monica - G. Simpson

8
  • Quick-R has simple example of using reshape package

  • See also ?reshape (LINK) for the Base R way of moving between wide and long format.


7

You don't have to use melt and cast.

Reshaping data can be done lots of ways. In your particular example on your cite using recast with aggregate was redundant because aggregate does the task fine all on it's own.

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)

I do like how, in your blog post, you explain what melt is doing. Very few people understand that and once you see it then it gets easier to see how cast works and how you might write your own functions if you want.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.