2012-08-01 60 views
3

我有一個包含三列的矩陣:縣,日期和ED訪問次數。日期重複每個縣,像這樣(只是一個例子):摺疊一個矩陣,將一列中的值與另一列中的值相加

County A 1/1/2012 2 
    County A 1/2/2012 0 
    County A 1/3/2012 5 
    ... etc. 
    County B 1/1/2012 3 
    County B 1/2/2012 4 
    ... etc. 

我想摺疊此矩陣來概括從每個日期所有縣的訪問。因此,它應該是這樣的:

1/1/2012 5 
1/2/2012 4 
etc. 

我試圖使用"table()"功能R中,但似乎無法得到它以這種方式按日期訪問操作。當我做"table(dt$date, dt$Visits)"它給了我這樣的頻率表:

   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
    2011-01-01 3 1 2 0 1 1 0 2 0 0 0 0 0 0 0 0 
    2011-01-02 2 3 1 0 0 1 0 0 1 0 2 0 0 0 0 0 
    2011-01-03 3 1 1 2 1 0 0 0 0 1 0 0 0 0 1 0 

有什麼建議嗎?有沒有更好的功能可以使用,也許是某種「總和」?

謝謝!

回答

3

由於@DWin狀態,table()不是用於求和,而是用於記錄計數。

我給的方法三個例子使用plyrdata.tableaggregate

all_data <- expand.grid(country = paste('Country', LETTERS[1:3]), 
    date = seq(as.Date('2012/01/01'), as.Date('2012/12/31'), by = 1)) 

all_data[['ed_visits']] <- rpois(nrow(all_data), lambda = 5) 



# using plyr 

library(plyr) 

by_date_plyr <- ddply(all_data, .(date), summarize, visits = sum(ed_visits)) 


# using data.table 
library(data.table) 
all_DT <- data.table(all_data) 
by_date_dt <- all_DT[, list(visits = sum(ed_visits)), by = 'date' ] 

# using aggregate 
by_date_base <- aggregate(ed_visits ~ date, data = all_data, sum) 
5

table()不是總和值,它是記錄計數。如果您想使用tapply,您將得到一個表格輸出並可以應用sum函數。或者,您可以使用ave獲取與數據幀長度相等的矢量和矢量。也許:

with(EDcounts, tapply(EDcounts[[3]], EDcounts[[2]], sum, na.rm=TRUE)) 

您也許能哄xtabs到訪問次數的總和,以及如果你把「訪問」列名的公式的LHS。

+0

謝謝! Tapply工作很棒。從來沒有見過「與」之前 - 酷! – mEvans 2012-08-02 00:10:17

+0

'與'會大大簡化您的控制檯工作。它的幫助頁面警告說,它可能導致函數內部的錯誤,就像使用「$」作爲函數一樣。 – 2012-08-02 00:32:59

相關問題