Создание вектора средних значений других групп вне текущей выбранной строки - PullRequest
0 голосов
/ 12 февраля 2019

Добрый день всем.Я делаю анализ задержки для определенных IP-адресов по дате.У меня есть вектор, который содержит конкатенацию IP-адреса - Дата в виде символа, называемого «ipdate», и вектор, который имеет среднее значение столбца «ipdate», называемого «ipdateMean».Это дает мне среднее значение определенного IP-адреса для выбранного дня недели.

То, что я пытаюсь сделать, это сравнить это с другими IP-адресами с той же датой, чтобы пользователь мог видеть, как его конкретный выбранный IP-адрес сравнивается со всеми остальными.Я думал создать отдельный вектор с именем «ip_not_mean», который вычисляет среднее значение всех других IP-адресов на определенную дату, но исключает среднее значение IP-адресов из текущей строки.См. Ниже

ipdate                         ipdateMean           ip_not_mean
123.32.56.78 - 2019.02.02         10                     30
123.45.67.34 - 2019.02.02         20                     26.6667
123.45.78.90 - 2019.02.02         30                     23.3333
123.45.78.56 - 2019.02.02         40                     20

Я пробовал это, но, похоже, не работает.

dtCLIPKey$ip_not_mean <- mean(dtCLIPKey$ipdateMean[which(dtCLIPKey$ipdate != dtCLIPKey$ipdate)])

Любые идеи приветствуются.

1 Ответ

0 голосов
/ 12 февраля 2019

Используя data.table, вы можете сделать следующее:

setDT(dtCLIPKey)[, ip_not_mean := mean(dtCLIPKey[ipdate != .BY, ipdateMean]), by = ipdate]

Обратите внимание, что это работает, только если каждое значение ipdate уникально.Если это не так, я бы создал столбец подсчета, который считает каждую строку.Код для этого ниже:

setDT(dtCLIPKey)[, count := 1:.N][, ip_not_mean := mean(dtCLIPKey[count != .BY, ipdateMean]), by = count]

После этого вы можете избавиться от столбца count, введя:

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