Сгруппированный фильтр на основе нескольких столбцов
У меня есть фрейм данных с 71 группой, 4 наблюдениями на группу и 18 переменными. Я хотел бы удалить всю группу, если какое-либо наблюдение в этой группе имеет меньше определенного значения в любой из 4 различных переменных, каждая из которых содержит одну и ту же строку в своем имени. Вот упрощенная версия:
df <- data.frame(group=letters[c(1, 1, 1, 2, 2, 2, 3, 3, 3)],
var.one=c(111, 100, 98, 93, 99, 101, 100, 99, 97),
var.two=c(102, 96, 99, 100, 101, 102, 99, 90, 101),
other=c(seq(1:9)))
Я хотел бы сохранить всех членов любой группы, где все переменные, содержащие «var», больше 95, и удалить всех членов любой группы, если любая переменная, содержащая «var» меньше 95. Это должно оставить меня с группой а:
group var.one var.two other
1 a 111 102 1
2 a 100 96 2
3 a 98 99 3
Я могу легко отфильтровать отдельные строки, соответствующие этим условиям, следующим образом:
df %>% filter_at(vars(contains('var')), all_vars(. >=95))
Но, конечно, это не удаляет всю связанную с ним группу. Я также могу легко исключить целые группы, которые не соответствуют одной переменной:
df %>% group_by(group) %>% filter(!any(var.one <95))
Но, конечно, это работает только для одной переменной, а не для нескольких переменных.
Как мне совместить эти два подхода?

2 ответа
С последней версиейdplyr
, ты можешь сделать
df %>%
group_by(group) %>%
filter(across(contains('var'), ~all(.>95)))
Вacross()
функция в основном заменяетfilter_at
иall_vars
в более поздних выпусках. Для получения дополнительной информации о функции обратитесь к?across
справочная страница.
Вы можете использоватьif_all
:
library(dplyr)
df %>%
group_by(group) %>%
filter(if_all(starts_with('var'), ~all(.x > 95))) %>%
ungroup
# group var.one var.two other
# <chr> <dbl> <dbl> <int>
#1 a 111 102 1
#2 a 100 96 2
#3 a 98 99 3
Другие вопросы
- Создайте сводную таблицу двух категориальных и числовых переменных1 ответ
У меня есть следующий гипотетический фреймворкRegion <- c("District A", "District B","District A","District A","District B") Gender <- c("Male","Male","Female", "Male","Female") Age <- c(20, ...
- Создайте цикл для генерации имен столбцов в большом списке1 ответ
Я хотел бы создать цикл, чтобы изменить имена столбцов, как показано:a <- c("day", "month", "year", "flow") У меня есть большой список из 6937 элементов, которые мне удалось импортировать в R:library(tidyverse) library(readtext) txt_files_ls <- paste...
- Построение лаговой матрицы в R1 ответ
Каждый год несколько человек переезжают в деревню. Это представлено следующим вектором:x <- c(304, 213, 688, 400, 122, 449, 143, 90) Ежегодно из села уезжает 10% людей. Доля людей из каждой когорты, остающихся через определенное количество лет (за 10 лет):decay <- (1-0.1)^(0:10) Используя R, к...
- Моя горизонтальная полоса обрезает текст, когда я сохраняю изображение. Как сделать полосы короче, а текст длиннее?1 ответ
Я новичок в R, так что простите мое невежество. Итак, я создал базовую горизонтальную гистограмму, используяbarplot( ). Мой текст на оси Y в основном исчезает. [IMG_OUR_ID=67.png] [IMG_OUR_ID=68.png] Есть ли способ удлинить и отобразить текст? Это мой код:barplot(mydata$`Sum Impact Risk`~mydata$`Eco...
- Почему case_when () вычисляет ложное условие?3 ответ
У меня есть data.frame с групповой переменной и целочисленной переменной с отсутствующими данными.df<-data.frame(group=c(1,1,2,2,3,3),a=as.integer(c(1,2,NA,NA,1,NA))) Я хочу вычислить максимально доступное значение переменнойa внутри каждой группы: в моем примере я должен получить 2 для группы 1...
- Удаление повторяющихся строк на основе самой последней записи3 ответ
Приношу свои извинения, поскольку я знаю, что варианты этого вопроса задавались раньше, но я попытался найти предоставленные ответы и не смог применить их к своим данным. У меня есть следующие данные по результатам опроса. Несколько человек прошли опросы для участия в различных вебинарах. Человек мо...
- Объедините набор переменных списка в фрейм данных, используя список, который ссылается на эти переменные списка1 ответ
Это было сложно сформулировать, поэтому создали пример. У меня есть набор переменных списка, которые я хотел бы объединить в фрейм данных. Это примеры списковa <- 2:7 b <- 9:14 c <- 25:30 d <- 31:36 У меня есть список, в котором есть элементы, которые ссылаются на приведенные выше имен...
- Я хочу добавить процент подсчета для каждой категории в качестве метки на мою круговую диаграмму ggplot1 ответ
Я использую код:age_pie_chart <- ggplot(data = data , aes(x = "", fill = `Q1: How old are you?`))+ geom_bar(position = "fill", width = 1) + coord_polar(theta = "y") + xlab("") + ylab("") + blank_theme + scale_fill_grey()+ theme(axis.text.x...
- Как вернуться к старому фрейму данных при удалении вновь добавленного столбца?1 ответ
Проблема Я объединил большое количество наборов данных в один фрейм данных. Затем я хочу использовать этот большой фрейм данных во всем своем коде. Однако иногда я хочу использовать только один из более мелких ранних наборов данных, но делать это с моим существующим большим фреймом данных. Я чувству...
- Обновляет data.table при передаче в качестве аргумента функции2 ответ
Когда я передаю data.table в качестве аргумента функции, я могу обновить эту таблицу «по ссылке» в вызываемой функции, и результаты будут применены к исходному объекту. Однако, если я делаю что-то, что требует «глубокой копии» (например, rbindlist для добавления строк), копия существует только в выз...

"Завидую тестировщикам: все хотят с ними дружить."