У меня есть пример набора данных:
df= data.frame(Id=c(NA, "601","865",NA,"743"), Date= as.Date(c("12/23/2019","12/12/2019","12/23/2019",
"11/21/2019","12/19/2019"), format = "%m/%d/%Y" ),
Amount=c(1100,-1100,-5055,675,-675), stringsAsFactors = F)
, который будет выглядеть следующим образом:
| Id | Date | Amount |
|-----|:----------:|-------:|
| NA | 12/23/2019 | 1100 |
| 601 | 12/12/2019 | -1100 |
| 865 | 12/23/2019 | -5055 |
| NA | 11/21/2019 | 675 |
| 743 | 12/19/2019 | -675 |
Теперь я хочу заполнить строки NA столбца Id. таким образом, что NA в Id будет заполняться одинаковыми значениями Id, имеющими одинаковое количество. Другими словами, когда сумма одинакова (независимо от того, является ли она положительным или отрицательным значением), значение NA Id будет заполнено тем же значением Id значения, имеющим одинаковое количество. В приведенном выше примере мы видим, что первая строка имеет NA, а вторая строка имеет значение Id 601. Поскольку оба принадлежат одному и тому же количеству 1100 (игнорируя положительные и отрицательные значения), NA должен быть заполнен одинаковым значением Id, т.е. , 601. В третьей строке нет многократного вхождения с NA в столбце Id, поэтому мы перейдем к следующей строке, в которой есть NA с тем же значением суммы, что и в пятой строке, и заполним его. Окончательный результат должен выглядеть следующим образом:
| Id | Date | Amount |
|-----|:----------:|-------:|
| 601 | 12/23/2019 | 1100 |
| 601 | 12/12/2019 | -1100 |
| 865 | 12/23/2019 | -5055 |
| 743 | 11/21/2019 | 675 |
| 743 | 12/19/2019 | -675 |