2014-04-01 20 views
0

我每小時都有一小時的降水值。R:每小時至每日降水,包裹層,ER:「沒有數值」

我的數據(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 

(日期,時間,沉澱)

,我想有基準的輸出 - 釹

我做與包裝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)) 

然後, d做的沉澱類似的東西,並試圖

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

,但得到的錯誤信息

Error: only defined on a data frame with all numeric variables

我承擔的東西可能是錯了我的數據輸入?我通過.txt文件從Excel 2010導入數據。

還是很新的,以一般的R和編程,所以我會很感激一些幫助:)

+0

什麼意思是「總結小時」和「Datum-Nd的輸出」?你對每個日期和時間有多重意見?或者你的意思是總結每天每小時的「Nd」觀察值? – jbaums

+0

我們不能用您的玩具數據重現錯誤。請查看以下鏈接,瞭解如何創建可重現的示例以及如何在R中執行此操作:[** here **](http://stackoverflow.com/help/mcve),[** here ** ](http://www.sscce.org/)和[** here **](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610)。 – Henrik

回答

0

這是你想要的嗎?

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

謝謝你的幫助。 「Datum = Datum」是我在做最高溫度和最低溫度時的剩餘時間......您的評論幫助我瞭解了ddply函數的實際工作方式。我只是試了一下,並得到以下錯誤消息:「總和沒有意義的因素」。我想這意味着該功能的作品,但不能應用於我的數據? – Anne

+0

我猜想,出於某種原因,當你讀取數據時,R已經將'Nd'解釋爲一個字符。 'read.table'的默認行爲是將字符轉換爲因子。您應該仔細檢查變量以嘗試檢測R可能已被解釋爲應該是數字的變量中的字符。從您提供的樣本數據中無法分辨出來(對於我來說,正如您所看到的,這對我來說很好)。 – Henrik

+0

嗨,與上面的建議一樣:一旦我清除環境並重新開始加載輸入數據並運行腳本,您的方法就可以完美工作。似乎所有的試驗和錯誤都搞砸了。非常感謝您的幫助:) – Anne

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.tableshere有很好的介紹性文字。

鑑於您的特定數據結構,以下應該做的伎倆。

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

謝謝你的幫助:)我安裝了軟件包,我確實得到了每日價值。但是,這些值顯然是錯誤的。在第一天,我應該有0.6的總降水量。我那天的結果是30.任何想法出了什麼問題? – Anne

+0

沒有看到更多的數據,很難說。 'sapply(DT,class)'表示'Nd'是數字嗎?它給你_exactly_ 30嗎? – jbaums

+1

@jbaums,另請參閱OP:對我的回答的評論。聽起來像'釹'是一個因素。 'ddply'失敗,而'data.table'似乎總結了一個'as.numeric'版本的因素。 – Henrik

相關問題