2012-08-01 58 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

相关问题