2016-09-21 11 views
3

我有一个日常流量的csv文件。我需要将每日价值结合到每月。我正在尝试使用“hydroTSM”软件包的“daily2monthly”功能。从BR​​PT2.csv 样本数据:如何解决这个错误:尝试在没有维度的对象上设置'rownames'

_date,_time,_value,_flag 
10/2/1959,0:00:00,0,2 
10/3/1959,0:00:00,0,2 
10/4/1959,0:00:00,1540,2 
10/5/1959,0:00:00,16100,2 
10/6/1959,0:00:00,6680,2 
10/7/1959,0:00:00,3100,2 
10/8/1959,0:00:00,2060,2 

我用下面的命令:

qme<- read.csv(file = "BRPT2.csv",header = T,sep = ",") #read in csv file 
date<- as.Date(qme$X_date,format("%Y-%m-%d")) #convert date column to date format from factor 
flow<- qme[,3] 
flow_2<-replace(flow,flow==-999,0) #replace the missing values (-999) with 0 
df<- data.frame() 
df<- rbind(df,data.frame(date,flow_2,stringsAsFactors = FALSE)) 
daily2monthly(df,FUN=sum,dates=1) 

而且它提供了以下错误信息:

Error in rownames<- (*tmp* , value = c("Oct-1959", "Nov-1959", "Dec-1959", : attempt to set 'rownames' on an object with no dimensions

有人能帮助我对此。提前致谢。

+0

添加一个'dput(DF)'你的问题,所以我们可以重现你的错误和实际帮助,而不是猜测 – Nate

回答

2

尝试转换您的dfzoo对象第一:

z <- zoo(df[, -1], df[, 1]) 
daily2monthly(z, FUN=sum, dates=1) 
# 1959-10-01 1959-11-01 1959-12-01 1960-01-01 1960-02-01 1960-03-01 1960-04-01 
# 31440.0  411.9  1199.3  4373.0  1466.0  1904.0  741.0 

daily2monthlydata.frame方法只有当你有数据的多个列的作品;在你的情况下,你只有一个,这就是为什么该函数返回错误信息。比方说,我们有一个数据更列:

df$station_3 <- sample(1:1000, nrow(df)) 
daily2monthly(df, FUN=sum, dates=1) 
#   flow_2 station_3 
# Oct-1959 31440.0 132423 
# Nov-1959 411.9 149305 
# Dec-1959 1199.3 157622 
# Jan-1960 4373.0 176413 
# Feb-1960 1466.0 143373 
# Mar-1960 1904.0 166102 
# Apr-1960 741.0 141861 
+0

我明白了。我确实尝试了动物园格式,它工作。但由于我需要做进一步的分析,我更喜欢数据框。不管怎样,谢谢。 –

+0

不客气。您可能已经想到了这一点,但是您可以将输出从daily2monthly(z,FUN = sum,dates = 1)转换回数据框,或者在数据框中插入占位符列,并在运行daily2monthly '。如果答案解决了您的问题,请将其标记为已接受。 –

相关问题