2015-10-13 187 views
1
  DATETIME  MAX.TEMP MIN.TEMP NEW.PRCP NEW.SNOW 
18791 1999/03/20 06:00  0.4  -2.0  0  0.0 
18911 1999/03/20 18:00  11.7  -1.5  0  0.0 
19031 1999/03/21 06:00  6.9  2.0  -1  0.1 
19151 1999/03/21 18:00  12.3  2.4  -1  0.0 
19271 1999/03/22 06:00  2.6  -1.1  1  0.0 
19391 1999/03/22 18:00  5.4  -2.3  0  0.0 
19511 1999/03/23 06:00  1.1  -3.9  1  0.1 
19631 1999/03/23 18:00  7.1  -3.1  0  0.1 
19751 1999/03/24 06:00  1.6  -2.6  0  0.1 
19871 1999/03/24 18:00  7.5  -0.8  1  0.1 

我想獲得列日平均:MAX.TEMP,MIN.TEMP 此外,我想獲得列日和:NEW.PRCP, NEW.SNOW在數據幀計算平均值和總和值

我一直在試圖用data.table類似前面一個問題here

我開始試圖模仿所提供的意見,並開始嘗試只得到平均爲MAX.TEMP:

setDT(new_Tbl)[, .(DATETIME = DATETIME[1L], MAX.TEMP = mean(MAX.TEMP)), 
      by = .(indx = substr(DATETIME,12,13) == '06'))] 

它返回意外的錯誤]和),並找不到函數「。」

我假設在我沒有遵循的語法中有快捷方式。我感謝幫助和耐心。

+1

那麼你在嘗試中遇到了什麼問題? – nrussell

+0

在原始問題中顯示您的嘗試可以更清楚地知道您需要幫助的位置。只是爲了將來的問題。下面是你已經擁有(看起來像我)對這個問題的一個很好的答案。 – Frank

+0

感謝您的加入。一般建議與data.table。如果你想看看一個列是什麼樣的,只需要把它放在DT [i,j,by]的'j'部分。因此,例如,你可以看看DT [,substr(DATETIME,12,13)]和DT [,substr(DATETIME,12,13)=='06']' – Frank

回答

1
library(data.table) 
setDT(df)[, `:=`(MAX.TEMP = mean(MAX.TEMP), MIN.TEMP = mean(MIN.TEMP), 
       NEW.PRCP = sum(NEW.PRCP), NEW.SNOW = sum(NEW.SNOW)), as.IDate(DATETIME)] 
# 
#    DATETIME MAX.TEMP MIN.TEMP NEW.PRCP NEW.SNOW 
# 1: 1999/03/20 06:00  6.05 -1.75  0  0.0 
# 2: 1999/03/20 18:00  6.05 -1.75  0  0.0 
# 3: 1999/03/21 06:00  9.60  2.20  -2  0.1 
# 4: 1999/03/21 18:00  9.60  2.20  -2  0.1 
# 5: 1999/03/22 06:00  4.00 -1.70  1  0.0 
# 6: 1999/03/22 18:00  4.00 -1.70  1  0.0 
# 7: 1999/03/23 06:00  4.10 -3.50  1  0.2 
# 8: 1999/03/23 18:00  4.10 -3.50  1  0.2 
# 9: 1999/03/24 06:00  4.55 -1.70  1  0.2 
# 10: 1999/03/24 18:00  4.55 -1.70  1  0.2 

每列都在`:=`(...)運算符內創建。此外,它全部按天分組,而無需明確創建新列as.IDate(DATETIME)

+1

謝謝@Pierre Lafortune!這是一個巨大的幫助。這是一個驚人的資源。 –