按组过滤并将所有实例保持在满足条件的位置

时间:2017-03-29 19:05:46

标签: r dataframe dplyr grouping

我发现了example类似的东西

基本上,我需要保持组中的所有项目,其中用户等于某个因素。

例如,这是我的初始数据框。

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 个答案:

答案 0 :(得分:1)

base R:

中试试
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),]

答案 1 :(得分:0)

我们可以使用%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