Заполнение пустых значений столбца на основе тех же значений в другом столбце с помощью R - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть пример набора данных:


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   |

1 Ответ

3 голосов
/ 12 февраля 2020

Вы можете попробовать это:

df$Id[is.na(df$Id)] <- df$Id[!is.na(df$Id)][match(abs(df$Amount[is.na(df$Id)]), abs(df$Amount[!is.na(df$Id)]))]
df
#>    Id       Date Amount
#> 1 601 2019-12-23   1100
#> 2 601 2019-12-12  -1100
#> 3 865 2019-12-23  -5055
#> 4 743 2019-11-21    675
#> 5 743 2019-12-19   -675
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...