Как отфильтровать (с помощью 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