2016-04-11 41 views
0

我剛開始使用R進行統計分析,並且仍在學習。我在R中創建循環時遇到了一個問題。我遇到以下情況,我想知道是否有人可以幫助我。對我來說似乎是不可能的,但對於你們中的一些人來說,這只是一小塊蛋糕。我有不同年份的不同公司的數據集。每家公司我有一個季度的財報數據,我需要計算收益的中位數爲每家企業每年用於: 數據集我就是這樣的:如何爲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 
. 
. 

我需要的結果是一樣以下

Year  Firm  Median 
2009  A   1250 
2010  A   1950 
2009  B   2225 
2010  B   .... 

我希望你能幫助我解決這個問題。預先感謝您:)

+0

是在這些類型的隨機線字面上的數據,或者是它您的文章有格式問題? – Gopala

+0

@ Gopala-這是一個格式問題 – Henry

+0

@亨利 - 謝謝你亨利,我還是新的stackoverflow.com。我一直在努力重新格式化我的文章:) –

回答

0

可以使用有用plyr包:

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

我試圖安裝軟件包時收到此消息:軟件包'dplyr'不可用(對於R版本3.1.1) –

+0

我建議更新R!你可以從「幫助 - >檢查更新」 –

+0

這樣做,dplyr是一個非常有用的軟件包,值得深入研究。特別是作爲新用戶,它可以爲您節省大量時間來操作數據集。 –

0

您的意思是「均值」而不是中位數?如果是這樣的話,你可以使用一個叫做aggregate()的漂亮函數。假設你的第二列被稱爲「年」,你可以試試這個:

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

謝謝Gerry的幫助,但是當我應用這些代碼時沒有任何改變。我得到相同的數據集 –

+0

你有沒有正確的列名?它爲我工作... d < - read.csv(「Book1.csv」) name(d)= c(「Quarter」,「Year」,「Firm」,「Earnings」) aggregate(d $收入,列表(年= d $年,公司= d $公司),平均值) –

+0

我認爲你與列的名稱混淆。我只有3列。日期列包含季度和年份。在我申請代碼之前,我需要分開這個季度。順便說一句你的代碼工作正常,如果我有4列。再次感謝您的幫助,我很感激。 –

相關問題