2016-03-20 3 views
-1

Я хочу объединить два набора данных на основе даты и определить конкретную дату как другую категорию. Первый data.frame - это данные качества воды с датой. Ниже показано (сначала несколько столбцов данных).R: Как объединить два кадра данных на основе другой даты

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» как «мокрый день». иначе я определю «сухой день». Я пытался использовать для цикла, и если функция определить, но я потерпел неудачу. У кого-нибудь есть умные идеи, которые помогут мне решить эту проблему? Я очень ценю это.

ответ

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" 
    } 
    } 
} 
Смежные вопросы