массовое удаление строк из фрейма данных на основе условия столбца - PullRequest
1 голос
/ 27 февраля 2020

Я хотел бы удалить все строки, основываясь на условии столбца. Приведенный ниже код создает пример тестовых данных

test_data <- data.frame(index = c(1,2,3,4,5), group = c("a", "a", "a", "b", "c"), count = c(1,2,2,3,4))

Фрейм данных имеет 3 столбца: индекс, группа и число. Я хотел бы удалить все строки, принадлежащие к той же группе, если любая строка в группе имеет число 1. Поэтому в приведенном выше фрейме данных я хотел бы удалить весь индекс 1, 2 и 3 из фрейма данных, поскольку первая строка имеет число = 1 и 2-й и 3-й ряд попадают в одну группу «а». Результирующий фрейм данных должен выглядеть следующим образом:

testdata2 <- data.frame(index = c(4,5), group = c("b", "c"), count = c(3,4))

Любая помощь будет оценена! Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2020

Мы можем использовать ave с subset в базе R и выбирать группы, которые не имеют значения, где count равно 1.

subset(test_data, ave(count != 1, group, FUN = all))

#  index group count
#4     4     b     3
#5     5     c     4

С dplyr это можно сделать как:

library(dplyr)
test_data %>% group_by(group) %>% filter(all(count != 1))

и data.table

library(data.table)
setDT(test_data)[, .SD[all(count != 1)], group]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...