2015-10-13 107 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!这是一个巨大的帮助。这是一个惊人的资源。 –