2012-12-03 65 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