Использование ntile из dplyr внутри оператора ifelse - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь сегментировать некоторые данные, используя ntile (из dplyr), в 'n' равных сегментах отдельно для отрицательных и положительных значений в одном столбце data.table.

Я продемонстрирую, что я имею в виду, на простом примере:

require(data.table)
require(dplyr)
Buckets <- 3

Check <- data.table(a = sample(-30:30,30))
Check[a < 0,Test := ntile(a[a < 0],Buckets) * -1]
Check[a >= 0,Test := ntile(a[a >= 0],Buckets)]

Когда я выполняю тест, чтобы проверить, в порядке ли сегменты (т. Е. Не перекрываются), вы можете увидеть, что он проверяет:

Check[,range(a),by = Test][order(Test)]

Я хочу объединить все вышеперечисленное в один оператор ifelse в data.table «Check», так как на практике я буду выполнять эти вычисления для нескольких столбцов, а строки, которые больше или меньше 0, будут отличаться в зависимости от столбца. , Поэтому я предпочел бы работать исключительно со столбцами, а не подстраивать строки по отдельности в соответствии с исходным кодом и повторять его для каждого столбца.

Когда я пытаюсь сделать следующее, похоже, он не идентифицирует строки, которые я ожидал бы при вызове функции 'ntile':

Check[,Test := ifelse(a < 0,
                 ntile(a[a < 0],Buckets)*-1,
                 ntile(a[a >= 0],Buckets))]

Выполните проверку еще раз:

Check[,range(a),by = Test][order(Test)]

Что не проверяется ...

Может кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает и возможно ли использовать здесь «ifelse»? Любые другие подходы также приветствуются, так как я всегда стремлюсь изучать новые вещи.

Любая помощь будет принята с благодарностью. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...