R:如何根据不同的日期合并两个数据帧

时间:2016-03-20 22:23:42

标签: r loops if-statement for-loop merge

我想基于日期合并两个数据集,并将特定日期定义为不同的类别。第一个data.frame是带有date的水质数据。如下所示(首先是几列数据)。

Organization   ID Latitude Longitude       Date Year Month Day       Depth
1        NJHDG   19  40.6475 -74.17350 2010-06-02 2010     6   2     Surface
2        NJHDG   14  40.7919 -74.07837 2010-06-03 2010     6   3 Near Bottom
3        NJHDG    2  40.9212 -74.17550 2010-06-07 2010     6   7    Midwater
4        NJHDG    5  40.8795 -74.12066 2010-06-09 2010     6   9    Midwater
5 31ISC2RS_WQX HR8A  40.9850 -73.90833 2010-06-10 2010     6  10     Surface
6        NJHDG    6  40.8890 -74.08166 2010-06-14 2010     6  14    Midwater

现在,我有另一个data.frame,它是一个降水数据(样本如下所示)。

    Date   PrecipitationIn
    128 2010-05-08            0.03
    129 2010-05-09            0.00
    130 2010-05-10            0.00
    131 2010-05-11            0.04
    132 2010-05-12            0.33
    133 2010-05-13            0.00

问题是我想在第一个数据框中定义日期为"湿天"如果当前日期,前一天,前两天通过使用降水数据具有> = 0.2英寸。 例如,对于日期" 2010-06-02"在第一个数据框中。如果是" 2010-5-31"或" 2010-6-01"或" 2010-6-02"有> = 0.2英寸的降水量,我将定义" 2010-06-02" as"湿天"。否则,我将定义"干燥的日子"。我试图用于循环和if函数来定义,但我失败了。有谁有聪明的想法来帮助我解决这个问题?我真的很感激。

1 个答案:

答案 0 :(得分:1)

好的 - 如果我能正确回答问题,我不能100%肯定。也许这个例子可以让你了解如何实现你想要的东西。

A <- read.table("path/to/your/dataset1", sep = " ", header = TRUE)
B <- read.table("path/to/your/dataset2", sep = " ", header = TRUE)

C <- merge(A, B, by = "Date")

C <- data.frame(C, day.type = NA)

for (i in 1:nrow(C)){
  if (i == 1) {
    if (C$PrecipitationIn[i] >= 0.2) {
      C$day.type[i] <- "wet day"
    } else {
      C$day.type[i] <- "dry day"
    }
  } else if (i == 2) {
    if (C$PrecipitationIn[i] >= 0.2 & C$PrecipitationIn[i-1] >= 0.2) {
      C$day.type[i] <- "wet day"
    } else {
      C$day.type[i] <- "dry day"
    }
  } else if (i > 2) {
    if (C$PrecipitationIn[i] >= 0.2 & C$PrecipitationIn[i-1] >= 0.2 & C$PrecipitationIn[i-2] >= 0.2) {
      C$day.type[i] <- "wet day"
    } else {
      C$day.type[i] <- "dry day"
    }
  } 
}