Фильтрация по группам и сохранение всех случаев, когда условие выполнено
Я нашел пример чего-то похожего
По сути, мне нужно сохранить все элементы группы, где пользователь равен некоторому фактору.
Например, вот мой начальный фрейм данных.
data <- data.frame(user = c("a","a",'b',"b",'c',"c","a","a","a","d","d","d"),
invoiceNum =c(1,1,1,1,1,1,2,2,2,2,2,2))
Мне нужно сохранить все счета, которые есть у пользователя d
,
Вывод будет выглядеть так:
user invoiceNum
1 a 2
2 a 2
3 a 2
4 d 2
5 d 2
6 d 2
Я попытался написать следующий код, но он не работает и дает мне следующее
data%>% group_by(invoiceNum)%>%dplyr::filter(user == "d")
user invoiceNum
<fctr> <dbl>
1 d 2
2 d 2
3 d 2
2 ответа
Решение
Попробуйте это в base
Р:
data[data$invoiceNum %in% unique(data[data$user=="d",]$invoiceNum),]
# user invoiceNum
#7 a 2
#8 a 2
#9 a 2
#10 d 2
#11 d 2
#12 d 2
Итак, вы сначала найдете те invoiceNum
в каком пользователе d
появился
unique(data[data$user=="d",]$invoiceNum)
а затем отфильтровать строки с извлеченными invoiceNum
,
РЕДАКТИРОВАТЬ
Если вы хотите сделать то же самое для нескольких пользователей:
usr <- c("d", "a")
data[data$invoiceNum %in% unique(data[data$user %in% usr,]$invoiceNum),]
Мы можем использовать %in%
data %>%
group_by(invoiceNum) %>%
filter('d' %in% user)
# user invoiceNum
# <fctr> <dbl>
#1 a 2
#2 a 2
#3 a 2
#4 d 2
#5 d 2
#6 d 2