2014-11-23 15 views
0

頭(數據)以下哪一個是更好的方法來總結行和創建一個繪圖(融合和轉換,或者tapply並創建一個新的數據框)?

 year Emissions 
114470 1999  7.38 
114472 1999  2.78 
114477 1999  11.76 
114479 1999  3.50 
114481 1999  1.32 
114486 1999  5.58 

這是海量數據與4年(1999年,2002年,2005年,和2008年)來設置。我想比較一個地塊每年的總排放量。以下兩種方法中的哪一種更好(更好=更適用於其他問題)?在我用ggplot2做了一個情節之後,這就是爲什麼我以第一種方式創建df的原因。

第一種方式

sums <- tapply(data$Emissions, data$year, sum) 
    df <- data.frame(year = names(sums), pollution = sums, row.names = NULL) 

第二種方式

melted_data <- melt(data, id.vars = c("year")) 
    df2 <- dcast(melted_data, year ~ variable, sum) 

他們都有相同的輸出。 df == df2返回TRUE

+0

做到既產生你想要的結果?如果是這樣,那麼「最佳」是什麼意思:最容易支持,最快(在什麼硬件上?),...? – Argalatyr 2014-11-23 01:51:51

+0

對不起,我應該指定。最好=更多功能用於其他問題。如果有必要,我基本上只想記住一個。 – megashigger 2014-11-23 01:59:59

+0

這實在是無法回答,這一切都取決於你正在解決的問題。不知道具體情況,這是一個太寬泛的問題。 – 2014-11-23 08:36:18

回答

3

請嘗試關注單行代碼。我已經改變了這裏的年值:

data 
     year Emissions 
114470 1999  7.38 
114472 1999  2.78 
114477 1998  11.76 
114479 1997  3.50 
114481 1998  1.32 
114486 1997  5.58 

df3 = aggregate(Emissions~year, data, sum) 
df3 
    year Emissions 
1 1997  9.08 
2 1998  13.08 
3 1999  10.16 

對於大數據,data.table可用於:

library(data.table) 
setDT(dd)[,list(pollution=sum(Emissions)),by=year] 
    year pollution 
1: 1999  10.16 
2: 1998  13.08 
3: 1997  9.08 
+0

謝謝!如果還有另一列(說「類型」是一個有兩個因素的分類),我是否也可以使用聚合來查看每年和類型的排放量?我現在用融化和鑄造來做這件事.. – megashigger 2014-11-23 17:20:01

+1

嘗試聚合(排放〜年份+類型,數據,總和) – rnso 2014-11-23 17:33:48

+0

這太容易了 - 謝謝! – megashigger 2014-11-24 16:37:45

相關問題