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

объединение с фильтрацией по нескольким критериям с использованием dplyr

Я пытаюсь выполнить описанную ниже операцию, создав файл df с именем event_f.

Я хочу из detail df в качестве критериев фильтрации все event_id, у которых есть type_id == 6, за исключением тех, у которых есть комбинация 6 и 3 или 6 и 7.

Обратите внимание, что могут быть и другие комбинации, но тогда все они должны быть включены.

library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.5.3
#> Warning: package 'purrr' was built under R version 3.5.3


event <- tibble(id = c("00_1", "00_2", "00_3", "00_4", "00_5", "00_6", "00_7"),
                type_id = c("A", "B", "C", "B", "A", "B", "C"))


detail <- tibble(id = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L),
                 event_id = c("00_1", "00_1", "00_2", "00_2", "00_3", "00_4", "00_4", "00_5", "00_6", "00_6", "00_7", "00_8"),
                 type_id = c(3L, 4L, 6L, 7L, 2L, 6L, 3L, 2L, 6L, 5L, 2L, 1L))



event_f <- event %>%
  semi_join(detail %>% filter(event_id %in% event$id,
                              type_id == 6,
                              type_id != (7 | 3)), by = c("id" = "event_id"))

Создано 01 апреля 2019 г. с помощью пакета reprex (v0.2.1)

Я хотел бы иметь df с одной строкой: id = "00_6" и type_id = "B". Я предполагаю, что проблема связана с двумя последними операциями filter(), но не знаю, как их объединить?

01.04.2019

Ответы:


1

Я думаю, тебе нужно

library(dplyr)

event %>%
   semi_join(detail %>%
               group_by(event_id) %>%
               filter(any(type_id == 6) & all(!type_id %in% c(3, 7))),
    by = c("id" = "event_id"))

# id    type_id
# <chr> <chr>  
#1 00_6  B     

Поскольку мы пытаемся найти event_id для тех type_id, которые удовлетворяют критериям, которые нам нужны для group_by event_id. Если мы не group_by, то вместо этого критерии фильтрации будут применяться ко всему фрейму данных, который вернет 0 строк, поскольку у нас есть значения 3 и 7 в фрейме данных.

01.04.2019
  • Это отлично, спасибо. Не могли бы вы объяснить, зачем вам нужен group_by здесь? 01.04.2019
  • @MattnDo Обновлен ответ с некоторыми пояснениями. 01.04.2019
  • Новые материалы

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

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

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

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

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

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

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