Как отфильтровать (с помощью dplyr) все значения группы, если достигнут предел переменной?

Вот фиктивные данные:

cases <- rep(1:5,times=2)
var1 <- as.numeric(c(450,100,250,999,200,500,980,10,700,1000))
var2 <- as.numeric(c(111,222,333,444,424,634,915,12,105,152))

maindata1 <- data.frame(cases,var1,var2)

df1 <-  maindata1 %>%
  filter(var1 >950) %>%
  distinct(cases) %>%
  select(cases)

table1 <- maindata1 %>%
  filter(cases == 2 | cases == 4 | cases == 5) %>%
  arrange(cases)

> table1
  cases var1 var2
1     2  100  222
2     2  980  915
3     4  999  444
4     4  700  105
5     5  200  424
6     5 1000  152

Я пытаюсь сформулировать фрейм данных, который содержит все данные, относящиеся к случаям, когда var1 >950, чтобы он отображал каждое значение var1 для этих случаев (также те значения, которые <950) и все значения var2 и отбрасывал бы все случаи где var1 не достигнет>950. Table1 создает желаемый фрейм данных, но мне пришлось вводить условия фильтрации вручную. Есть ли способ использовать эти df1$case в качестве условия фильтрации для извлечения одного и того же кадра данных в результате?

Я новичок в R и пытаюсь научиться манипулировать данными в основном с помощью dplyr, потому что его синтаксис почти понятен для неспециалистов... поэтому, если кто-то может предложить решение на основе dplyr, это было бы замечательно, конечно, я готов услышать решения, основанные на на другие пакеты, а также.

1 ответ

Решение

Сортировать по max(var1) в каждой группе, определенной cases:

maindata1 %>%
  group_by(cases) %>%
  filter(max(var1) > 950) %>%
  arrange(cases)

#   cases var1 var2
# 1     2  100  222
# 2     2  980  915
# 3     4  999  444
# 4     4  700  105
# 5     5  200  424
# 6     5 1000  152
Другие вопросы по тегам