我有小时的降水值,我想在一小时内总结一下。
我的数据(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和一般的编程来说还是非常新的,所以我真的很感激一些帮助:)
答案 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