Фильтрация по группам и сохранение всех случаев, когда условие выполнено

Я нашел пример чего-то похожего

По сути, мне нужно сохранить все элементы группы, где пользователь равен некоторому фактору.

Например, вот мой начальный фрейм данных.

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
Другие вопросы по тегам