2012-12-03 17 views
0

另一個棘手的問題我無法解決。在data.frame中使用If條件

我有兩個數據框(「陽光」和「霜」)。一個是每年累計日照時數,另一個是冬季極端氣溫(12月 - 2月)。我現在需要做的是檢查Frost的這些數據框架。 在這種情況下,如果溫度低於-19度,我們會談到弗羅斯特。但是,如果一年中的日照時數超過300小時,我們就會談到弗羅斯特 - 21度。然而,另一個先決條件是,數據幀Frost中的年份必須在當前結束時和次年(12月至2月)檢查。這意味着,如果1962年日照時數超過300小時,我需要檢查1962年12月到1963年2月的霜。 以下是data.frames。

"Sunshine" 

year  hours 
1962  396 
1963  290 
1964  301 


"Frost" 

Date temperature 
1962-12-26 -19.21 
1963-01-13 -20.29 
1963-01-17 -21.47 
1964-01-31 -20.54 

現在我遇到的麻煩是如何將這些結合起來,dataframes,所以它顯示我只能用冰霜溫度,那裏的條件已經得到滿足的日期。

在這種情況下,我們在1962年冬季沒有發生19,21°的霜凍事件,因爲年內陽光超過300小時,觸發溫度爲-21°。 1963年1月,我們發生了霜事件,因爲1962年日照時間超過了300小時,所以情況達到-21°。因爲1963年的陽光超過了300小時,因此也是在1964年的霜。

1963-01-17 -21.47 
1964-01-31 -20.54 

有沒有人有關於如何解決這個問題的想法。

+0

你嘗試過什麼?我會在一年中將兩個data.frames合併在一起,以便您可以將行邏輯作爲開始。看看'as.Date',''strptime'和'merge'。 – Justin

回答

0

背起賈斯汀的建議,並假設Frost$Date有類Date

x <- Frost 
x$year <- as.numeric(format(x$Date, "%Y")) 
x <- merge(x, Sunshine) 
x <- transform(x, threshold = ifelse(hours > 300, -21, -19)) 
subset(x, temperature < threshold)[,2:3] # Noting that column 1 is year 

#   Date temperature 
#2 1963-01-13  -20.29 
#3 1963-01-17  -21.47