首页 文章

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

提问于
浏览
0

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

我的数据(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

    这是你想要的吗?

    library(plyr)
    ddply(.data = df, .variables = .(Datum), summarize,
          sum_precip = sum(Nd))
    #        Datum sum_precip
    # 1 2013-05-01        0.4
    
  • 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]
    

相关问题