在R中按个案标准过滤

时间:2017-01-10 03:25:48

标签: r filter

我有一个这样的数据框:

| ID | VisitNum | Type        |
|----|----------|-------------|
| 1  | 1        | Store       |
| 1  | 1        | Online      |
| 2  | 3        | Catalog     |
| 2  | 3        | SmokeSignal |
| 3  | 100      | Walk-In     |

我想删除重复的行,但是有一系列人为定义的标准可以删除。基本上,

“如果ID和VisitNum出现不止一次,那么就是  如果“类型”的重复值为“存储”和“联机”,请使用“在线”删除该行 OR
如果Type的重复值为Catalog和SmokeSignal,请删除具有SmokeSignal“

的行

输出结果为:

| ID | VisitNum | Type        |
|----|----------|-------------|
| 1  | 1        | Store       |
| 2  | 3        | Catalog     |
| 3  | 100      | Walk-In     |

我想使用dplyr并进行一些分组和过滤......我在想这样的事情:

 dupes <- dupes %>%
  group_by(ID, VisitNum) %>%
  summarise(Count=n() )
  filter( <here's where I get stuck...some condition where the Count is greater than 1 then...> )

任何正确方向的推动都将受到高度赞赏。

这是我的数据框:

dupes <- data.frame(ID=c(1, 1, 2, 2, 3), VisitNum=c(1, 1, 3, 3, 100), Type=c('Store', 'Online', 'Catalog', 'SmokeSignal', 'Walk-In'))

1 个答案:

答案 0 :(得分:0)

根据这个例子,我们可以使用slice来获取第一个元素,假设&#39; Type&#39;已按顺序

library(dplyr)
dupes %>%
   group_by(ID, VisitNum) %>%
   slice(1)
#   ID VisitNum    Type
#  <dbl>    <dbl>  <fctr>
#1     1        1   Store
#2     2        3 Catalog
#3     3      100 Walk-In

或基于标准

dupes %>% 
     group_by(ID, VisitNum) %>% 
     filter((n() > 1 & !(Type %in% c("Online", "SmokeSignal")))| n()==1)
#     ID VisitNum    Type
#  <dbl>    <dbl>  <fctr>
#1     1        1   Store
#2     2        3 Catalog
#3     3      100 Walk-In