2017-09-20 31 views
0

我R中,看起來像有data.table如下:總結data.table但添加列

> head(t) 
    ITEM COUNTRY YEAR MONTH QUANTITY 
1: 1  1 2014  1  2 
2: 1  2 2014  1  133 
3: 2  3 2014  1  2 
4: 3  4 2014  1  20 
5: 3  2 2014  1  142 
6: 4  4 2014  1  5 

沒有爲項目國相同的組合數據也爲其他年/月;我有2014年1月至2015年12月的數據,因此爲24個月。它可能是,並非所有的項目/國家對所有點的數據,即有的只有19個月等

我知道如何在整個時期內聚集數量:

agg = t[,list("TOT Q"=sum(QUANTITY)),by='ITEM,COUNTRY'] 

不過,現在我想是這樣的:

項目 - 國家 - Q 1-2014 - Q 2-2014 - .... - Q 12-2015

如果沒有數據爲某個特定項目/國家, Q應該是零,否則它應該是年份和月份相應行中的數據第n個。即我想彙總項目和國家,但是,保留所有的數量,並把它們放在不同的欄目中。

編輯:

試過夏侯的評論,這不是DIT擺在首位的工作。但我解決了它。我得到0和1作爲輸出,並警告缺少一個聚合函數。搜索這個警告我發現stackoverflow.com/questions/30463591/...它解決了我的問題。正如我所說,我有更多的變量,所以對於某些項目/國家/月/年組合,我有重複,因爲它們與其他變量不同,所以我需要一個聚合函數(總和)。

我現在用的是什麼:

dcast(t, ITEM + COUNTRY ~ MONTH + YEAR, value.var="QUANTITY", fun.aggregate=sum) 
+1

像'dcast(T,ITEM + COUNTRY〜paste0( 'M',MONTH, '_',年)),lapply(.SD,總之, na.rm = TRUE),by =。(ITEM,COUNTRY)]'? – Jaap

+0

我正在嘗試,但到目前爲止不起作用。另外,在數量之後,我在數據框中有更多變量。所以現在不使用正確的變量。此外,這是否立即把正確的價值在正確的列?比如年份和月份是否匹配? –

+0

我解決了它。我得到0和1作爲輸出,並警告缺少一個聚合函數。搜索此警告我發現https://stackoverflow.com/questions/30463591/r-reshape2-aggregation-function-missing-defaulting-to-length它解決了我的問題。正如我所說,我有更多的變量,所以對於某些項目/國家/月/年組合,我有重複,因爲它們與其他變量不同,所以我需要一個聚合函數(總和)。 –

回答

1

試過夏侯的評論,這不是DIT擺在首位的工作。但我解決了它。我得到0和1作爲輸出,並警告缺少一個聚合函數。搜索這個警告我發現stackoverflow.com/questions/30463591/...它解決了我的問題。正如我所說,我有更多的變量,所以對於某些項目/國家/月/年組合,我有重複,因爲它們與其他變量不同,所以我需要一個聚合函數(總和)。

我現在用的是什麼:

dcast(t, ITEM + COUNTRY ~ MONTH + YEAR, value.var="QUANTITY", fun.aggregate=sum)