R:每小时到每日降水,包装plyr,ER:"没有数值"

时间:2014-04-01 07:52:30

标签: r sum plyr

我有小时的降水值,我想在一小时内总结一下。

我的数据(Nd_hourly)如下所示:

    Datum   Uhrzeit Nd
1   2013-05-01  01:00:00    0.0
2   2013-05-01  02:00:00    0.1
3   2013-05-01  03:00:00    0.0
4   2013-05-01  04:00:00    0.3

(日期,时间,降水量)

我想要输出Datum - Nd

我用包plyr和函数ddply用

做了最小和最大温度
t_maxmin=ddply(t_air,.(Datum),summarize,Datum=Datum[which.max(T_Luft)],max.value=max(T_Luft),min.value=min(T_Luft))

然后我尝试为沉淀做类似的事情并尝试

Nd_daily=ddply(Nd_hourly,.(Datum),summarize,Datum=Datum, sum(Nd_hourly))

但是收到错误消息

  

错误:仅在具有所有数字变量的数据框上定义

我认为我的数据输入可能有问题?我通过.txt文件从Excel 2010导入数据。

对于R和一般的编程来说还是非常新的,所以我真的很感激一些帮助:)

2 个答案:

答案 0 :(得分:0)

我认为@Henrik确定了您的问题,但这是另一种方法,使用data.table

# Create some fake datetime data
datetime <- seq(ISOdate(2000,1,1), ISOdate(2000,1,10), "hours")

# A data.frame with columns for date, time, and random precipitation data. 
DF <- data.frame(date=format(datetime, "%Y-%m-%d"),
                 time=format(datetime, "%H:%M:%S"),
                 precip=runif(length(datetime)))

head(DF)

#         date     time    precip
# 1 2000-01-01 12:00:00 0.9294353
# 2 2000-01-01 13:00:00 0.5082905
# 3 2000-01-01 14:00:00 0.5222088
# 4 2000-01-01 15:00:00 0.1841305
# 5 2000-01-01 16:00:00 0.9121000
# 6 2000-01-01 17:00:00 0.2434706

library(data.table)
DT <- as.data.table(DF) # convert to a data.table
DT[, list(precip=sum(precip)), by=date]

#           date    precip
#  1: 2000-01-01  7.563350
#  2: 2000-01-02 10.147659
#  3: 2000-01-03 10.936760
#  4: 2000-01-04 13.925727
#  5: 2000-01-05 11.415149
#  6: 2000-01-06 10.966494
#  7: 2000-01-07 12.751461
#  8: 2000-01-08 15.218148
#  9: 2000-01-09 12.213046
# 10: 2000-01-10  6.219439

data.tables here上有一篇很棒的介绍性文字。

鉴于您的特定数据结构,以下应该可以解决问题。

library(data.table)
DT <- data.table(Nd_hourly)
DT[, list(Nd_daily=sum(Nd)), by=Datum]

答案 1 :(得分:0)

这是你想要的吗?

library(plyr)
ddply(.data = df, .variables = .(Datum), summarize,
      sum_precip = sum(Nd))
#        Datum sum_precip
# 1 2013-05-01        0.4