Хобрук: Ваш путь к мастерству в программировании

Повторяющаяся фильтрация с несколькими условиями без цикла

У меня есть большой набор данных из примерно 35000 наблюдений и 24 переменных (одна из которых является временным рядом), но я могу резюмировать, чего я хочу достичь с помощью радужной оболочки глаза.

library(tidyverse)

iris.new <- iris %>%
  arrange(Species, Sepal.Length, Sepal.Width) %>%
  group_by(Species)

unwanted <- iris.new %>%
  filter(Sepal.Length > 5 & Sepal.Width==min(Sepal.Width))

while(nrow(unwanted)!=0) {
  iris.new <- iris.new %>%
    arrange(Species, Sepal.Length, Sepal.Width) %>%
    group_by(Species) %>%
    filter(!(Sepal.Length > 5 & Sepal.Width == min(Sepal.Width)))
  unwanted <- iris.new %>%
    filter(Sepal.Length > 5 & Sepal.Width==min(Sepal.Width))
}

Я хочу отфильтровать только Sepal.Length> 5, у которого есть минимальная ширина Sepal.Width в пределах наблюдений для каждого вида (у setosa и versicolor нет). Когда я избавился от первого, я повторяю фильтр, чтобы увидеть, есть ли он, и, наконец, использовал цикл while, чтобы сделать это за меня.

Есть ли способ отфильтровать их без использования цикла?

10.08.2018

  • Ваш вопрос непонятен. Почему цикл while? Почему бы не сделать _1 _ ??? 10.08.2018
  • @Onyambu, потому что при однократной фильтрации изменяется min (Sepal.Width). Затем я должен повторить еще раз в соответствии с новым значением min (Sepal.Width). Когда мы вручную повторяем наш цикл while, это легче увидеть. Сначала снимается 1 ряд, затем еще 3. 10.08.2018
  • ну, вы отфильтруете все минуты, пока не закончится 5, затем вы перестанете фильтровать. Так почему бы просто не отфильтровать 5 ?? 10.08.2018
  • Исходные данные, над которыми я работаю, имеют столбец даты, столбец значений, начинающийся с 0, и столбец имени с 1200 разными именами (аналогично Species). Моя цель повторить это потому, что я пытаюсь обрезать первые нулевые значения в начале (с точки зрения даты). Надеюсь, в этом есть больше смысла. 10.08.2018

Ответы:


1

Я думаю, это помогает:

# get minimum Sepal.Width without Sepal.Length > 5
iris_min <- iris %>%
  group_by(Species) %>%
  filter(Sepal.Length <= 5) %>%
  summarize(min_sep_width = min(Sepal.Width))

# check to see that nothing is below our minimum 
#   or equal to it with a Sepal.Length that's too long
iris_new <- iris %>% 
  left_join(iris_min, by = c('Species')) %>%
  filter(min_sep_width < Sepal.Width | 
           (min_sep_width == Sepal.Width & Sepal.Length <= 5)) %>%
  select(-min_sep_width)
10.08.2018
Новые материалы

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.