2016-04-11 23 views
0

Sadece istatistiksel analiz için R kullanmaya başladım ve hala öğreniyorum. R.'de döngüler oluşturmayla ilgili bir sorunum var. Aşağıdaki davayla ilgileniyorum ve herhangi birinin bana yardım edip edemeyeceğini merak ediyorum. Benim için imkansız görünüyor ama bazılarınız için sadece bir parça kek. Farklı yıllar boyunca farklı firmalar için veri setim var. Her firma için bir aylık kazanç verilerini var ve her yıl için her firma için kazanç ortancasını hesaplamak gerekir: ihtiyacım sonuç gibidirAşağıdaki durum için döngü oluşturma R

Date  Firm Earnings 
1Q 2009 A  1000  
2Q 2009 A  1500 
3Q 2009 A  500 
4Q 2009 A  2000 
1Q 2010 A  1200 
2Q 2010 A  1800 
3Q 2010 A  2100 
4Q 2010 A  2500 
1Q 2009 B  1750 
2Q 2009 B  2400 
3Q 2009 B  3000 
4Q 2009 B  2050 
. 
. 

: Ben veri seti sadece aşağıdaki gibidir Aşağıdaki bu konuda bana yardımcı olabileceğinizi umuyorum. şimdiden teşekkürler :)

+0

rastgele hatlarının bu tür anlamıyla veri mi, yoksa öyle Gönderinizle biçimlendirme sorunu mu yaşıyorsunuz? – Gopala

+0

@ Gopala- – Henry

+0

@ Henry ile biçimlendirme problemi oldu - teşekkürler Henry, ben hala stackoverflow.com ile yeni. Mesajımı yeniden biçimlendirmek için uğraşıyordum :) –

cevap

0

Sen yararlı plyr paketini kullanabilirsiniz:

install.packages("plyr") 

### Assuming your data is stored in a data frame called "x" ### 

### Strip the quarters from the Date variable ### 
x$Date <- gsub("1Q", "", x$Date) 
x$Date <- gsub("2Q", "", x$Date) 
x$Date <- gsub("3Q", "", x$Date) 
x$Date <- gsub("4Q", "", x$Date) 

### Collapse by Date and by Firm ### 
y <- ddply(x, c("Date", "Firm"), summarise, 
     Median = median(Earnings, na.rm = T)) 
+0

Paketini yüklemeye çalıştığımda bu iletiyi aldım: paket ‘dplyr’ mevcut değil (R sürüm 3.1.1 için) –

+0

R güncelleştirmesini öneririm! "Yardım -> Güncellemeleri Denetle" bölümünden bunu yapabilirsiniz. –

+0

dplyr çok kullanışlı bir pakettir ve daha yakından bakmaya değerdir. Özellikle yeni bir kullanıcı olarak, veri kümenizi işlemek için size çok zaman kazandırabilir. –

0

Yani "Ortalama" yerine Median demek istediniz? Bu durumda, aggregate() adında bir şık işlev kullanabilirsiniz. İkinci sütun varsayarsak denir "Yıl," Bu deneyebilirsiniz:

newdata <- aggregate(mydata$Earnings, list(Year=mydata$Year, Firm=mydata$Firm), mean) 
+0

Yardımlarınız için teşekkürler Gerry, ama kodu uygularken hiçbir şey değişmez. Aynı veri kümesini aldım –

+0

Doğru sütun adlarına sahip misiniz? Benim için çalıştı ... d <- read.csv ("Kitap1.csv") isimleri (d) = c ("Çeyrek", "Yıl", "Firma", "Kazanç") toplama (d $ Kazançlar, liste (Yıl = d $ Yıl, Firma = d $ Firma), ortalama) –

+0

Sanırım sütunların adıyla karıştırıldınız. Sadece 3 sütunum var. Tarih sütunu çeyrek ve yılı içerir. Kodunuzu uygulamadan önce çeyreği ayırmam gerekiyor. Bu arada 4 sütunum varsa kodunuz iyi çalışıyor. Yardımınız için tekrar teşekkür ederim, minnettarım. –

İlgili konular