Nano Hash - криптовалюты, майнинг, программирование

сравнить совокупную стоимость по группам

С df ниже,

  1. необходимо вычислить медиану для переменной metric по командам tm1, tm2 и tm3 на основе комбинации locid, day, hour
  2. затем отфильтруйте только те наблюдения locid, day, hour, которые имеют одинаковую медиану metric для команд tm1, tm2, tm3.

    set.seed(100)
    df <- data.frame(
        locid = sample(c(1111,1122,1133), 20, replace=TRUE),
        day = sample(c(1:3), 20, replace=TRUE),
        hour = sample(c(1:4), 20, replace=TRUE),
        team = sample(c("tm1", "tm2", "tm3"), 20, replace=TRUE),
        metric = sample(1:5, 20, replace=TRUE )
    )
    

моя попытка

df_medians <- df %>% 
                group_by(locid + day + hour + team) %>%
                  summarise(metric_median = median(metric))

это дает median за team для каждого locid + day + hour. Теперь мне нужно найти комбинации locid + day + hour, которые дают одинаковое медианное значение для команд tm1, tm2, tm3.

df_medians %>% group_by(locid, day, hour, team) %>% summarise(??what here??)

Я пробовал с dplyr, но с base-r все в порядке.

В качестве более простого примера мы можем взглянуть на приведенные ниже данные, в которых есть измерения из двух разных мест для двух команд.

+-------+------+-------+-------+---------+
| locid |  day |  hour |  team |  metric |
+-------+------+-------+-------+---------+
|  1111 |    1 |     1 |  tm1  |       3 |
|  1111 |    1 |     1 |  tm1  |       2 |
|  1111 |    1 |     1 |  tm1  |       1 |

|  1111 |    1 |     1 |  tm2  |       1 |
|  1111 |    1 |     1 |  tm2  |       2 |
|  1111 |    1 |     1 |  tm2  |       3 |

|  1122 |    1 |     1 |  tm1  |       3 |
|  1122 |    1 |     1 |  tm1  |       2 |
|  1122 |    1 |     1 |  tm1  |       1 |

|  1122 |    1 |     1 |  tm2  |       1 |
|  1122 |    1 |     1 |  tm2  |       2 |
|  1122 |    1 |     1 |  tm2  |       1 |
+-------+------+-------+-------+---------+

шаг 1 - вычислить медиану по группе

+-------+------+-------+-------+-------------+
| locid |  day |  hour |  team |  metric_med |
+-------+------+-------+-------+-------------+
|  1111 |    1 |     1 |  tm1  |       2     |
|  1111 |    1 |     1 |  tm2  |       2     |
|  1122 |    1 |     1 |  tm1  |       2     |
|  1122 |    1 |     1 |  tm2  |       1     |
+-------+------+-------+-------+-------------+

Шаг 2 — сравнить медианы по группе (locid + день + час) только (1111, 1, 1) имеет одинаковое значение metric_med для команд gp1 и gp2.

+-------+------+-------+-------------+
| locid |  day |  hour |  metric_med |
+-------+------+-------+-------------+
|  1111 |    1 |     1 |       2     |
+-------+------+-------+-------------+
19.03.2017

  • Вы можете добавить ожидаемый результат? 19.03.2017
  • Вы можете распределить столбцы своей команды, а затем изменить их по строкам. 19.03.2017
  • Не могу понять, что вы хотите. Одно и то же среднее значение для 3 команд во всех группах? 19.03.2017
  • @Feng да, строки с одинаковым средним значением для 3 команд во всех группах. 19.03.2017
  • @yeedle — добавлен более простой пример с выводом 19.03.2017

Ответы:


1

Один из способов сделать это — распределить группы по одной строке для каждого locid, дня и часа, а затем сравнить их. Это решение хорошо масштабируется для более чем двух групп и сложных условий.

library(dplyr)
library(tidyr)

data %>% 
  group_by(locid, day, hour, team) %>% 
  summarize(median = median(metric)) %>%
  spread(team, median) %>% 
  filter(tm1 == tm2)

Другое возможное решение состоит в том, чтобы упорядочить сводные результаты по времени, дню и часу, а затем сравнить медиану в одной строке с ее lag. Это решение работает только для двух групп в команде.

data %>% 
  group_by(locid, day, hour, team) %>% 
  summarize(median = median(metric)) %>%
  arrange(locid, day, hour) %>% 
  filter(median == lag(median))
19.03.2017

2

Давайте изменим выражение «все равны» на «нулевую дисперсию или одно наблюдение». Таким образом:

df %>% # per locid, day, hour, team group_by(locid, day, hour, team) %>% # compute median summarize(team_median = median(metric)) %>% # ungroup before specifying new grouping ungroup %>% # for locid, day, hour group_by(locid, day, hour) %>% # find the medians that were the same for all teams # 'the same' here is taken to mean no variance # or having a single observation # note that, although logical vector TRUE | NA does yield TRUE # this is only because it must yield TRUE. # As another example, FALSE | NA, yields NA. # As a guard against team_medians that are NA, I add a coalesce wrapper. # I've decided that missing team_medians represent non-cases, YMMV summarize(all_equal = coalesce(n() == 1 | var(team_median) == 0), FALSE) %>% filter(all_equal == TRUE) %>% select(-all_equal)

19.03.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..