2012-09-12 187 views
0

對於從SQL查詢填充的數據幀,看起來像這樣:操縱數據幀 - R的

Company  Month   Total_Count 
ABC   2012-03   10 
ABC   2009-01   1 
DEF   2011-01   29 
GHI   2001-09   10 
GHI   2008-01   9 
GHI   2010-09   100 

我想拿出一份摘要報告,將輸出這樣的:

Company   Total   Months 
ABC    11   10   1 
DEF    29   29 
GHI    119   10  9 100 

其中列Total將在所有的幾個月
和列Months總和將是單獨計數每個月遇到那個機構。我很想看看是否有可能以某種方式擠進實際的月份。喜歡的東西:

Company   Total   Months 
           2009-01 2012-03 
ABC    11   10  1 
           2011-01 
DEF    29   29 
           2001-09 2008-01 2010-09 
GHI    119   10  9   100 

到目前爲止,我只能夠得到高於期望結果的第2列做:

df1 <- ddply(resultSet, .(company_name), summarize, sum(as.numeric(total_count))) 

但我不知道我怎麼可以追加信息個人月

+0

這些可能不是R中的日期或日期時間列。Youare可能聚合了'因素'或'字符'分類變量。 –

回答

1
library(reshape2) 
res <- ddply(resultSet, .(Company), summarize, Total = sum(Total_Count)) 
# if value.var is not specified, dcast uses the last column. see ?guess_value 
months <- dcast(resultSet, Company ~ Month, value.var = "Total_Count", sum) 
join(res, months, by = "Company") 
    Company Total 2001-09 2008-01 2009-01 2010-09 2011-01 2012-03 
1  ABC 11  NA  NA  1  NA  NA  10 
2  DEF 29  NA  NA  NA  NA  29  NA 
3  GHI 119  10  9  NA  100  NA  NA 

在問題的上下文中具有聚合函數是很重要的。

+0

我不明白函數'dcast'如何使用'Total_Count'列來生成該表。如果明天我有另一個Count列表示其他的東西,那該怎麼辦?是否可以指定哪個列可以用來分散表格? –

+0

它自動猜測'Total_Count',因爲這是最後一個(在這種情況下,只有)列。你可以使用'value.var'明確指定。默認情況下,它猜測最後一列是值列。有關更多信息,請參閱'?guess_value'。 – Maiasaura

+0

@ darkie15更新了我的答案。 – Maiasaura

0

既然你給它沒有名字,我選擇「CDF」

agg1 <- aggregate(namcounts, cdf['Company'], function(x) sumC=sum(x)) 
aggC <- lapply(split(namcounts, cdf['Company']), function(x) listC= list(x)) 
agg1$clist <- sapply(aggC, "[[" ,1) 
agg1 
    Company x  clist 
1  ABC 11  10, 1 
2  DEF 29   29 
3  GHI 119 10, 9, 100 

另一種方式來記錄這將是一個月的計數粘貼有隔離。目前這些都是作爲一個列表存儲的。