Назначение значения из одной таблицы в другую при выполнении условий. [Р] - PullRequest
0 голосов
/ 24 марта 2020

Я хотел бы присвоить значения из gdd $ GDDValue для модели $ GDD.

Я хотел бы назначать значения только тогда, когда gdd $ DateGDD == модель $ DateGDD.

Значения, которые можно назначить из gdd $ GDDValue, должны удовлетворять условиям:

Temp <- '5'
Date0 <- '2017-09-10'  #(RRRR-MM-DD)
IdStation <- '12230'

Мои таблицы:

gdd:

    Temp         Date0         DateGDD      IdStation       GDDValue
1      3    2017-08-15      2018-04-08          12330         1280.0
2      3    2017-08-15      2018-04-08          12230         1151.4
3      3    2017-08-15      2018-04-08          12345         1205.2
4      5    2017-08-15      2018-04-08          12330         1119.9
...  ...           ...             ...            ...            ...

> unique(gdd$Temp)
[1]  3  5 10
> unique(gdd$Date0)
[1] "2017-08-15" "2017-08-25" "2017-09-01" "2017-09-10" "2017-09-20" "2017-09-30" "2017-10-10"
> unique(gdd$DateGDD)
 [1] "2018-04-08" "2018-04-11" "2018-04-14" "2018-04-18" "2018-04-19" "2018-04-21" "2018-04-28" "2018-05-20" "2018-06-16"
[10] "2018-07-07"
> unique(gdd$IdStation)
[1] 12330 12230 12345

модель:

          Id         DateT        DateGDD          Date0      GDD  ...
1    N0254_1    2018-04-10     2018-04-11     2017-09-10           
2    N0254_2    2018-04-10     2018-04-11     2017-09-10           
3    N0254_3    2018-04-10     2018-04-11     2017-09-10           
4    N0254_4    2018-04-10     2018-04-11     2017-09-10                     
...      ...           ...            ...            ...      ...  ...

> unique(model$DataT)
[1] "2018-04-10" "2018-04-09" "2018-04-12"
> unique(model$DateGDD)
[1] "2018-04-11" "2018-04-14"
> unique(model$Date0)
[1] "2017-09-10"

У меня было бы два уникальных значения в модели $ GDD, потому что только две даты перекрываются в обеих таблицах.

Одно значение для 2018-04-11, другое для 2018-04-14. Эти значения должны заполнять весь столбец GDD модели.


Я использую этот код, но он работает некорректно.

for(x in 1:nrow(model)){
  DateA <- model$DateGDD
  GddAssign <- gdd[which((gdd$DateGDD==DateA)&(gdd$IdStation==IdStation)&(gdd$Temp==Temp)&(gdd$Date0==Date0)),GDDValue]
  if (length(GddAssign)==0) {
    model$GDD <- NaN
  } else {
    model$GDD <- GddAssign 
  }
}

Результат кода: Значения были назначены на модель $ GDD, но не полностью. Кроме того, эти значения не включают в себя условие gdd $ DateGDD == model $ DateGDD, которому они должны соответствовать.

...