我有一个这样的数据框:
| 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'))
答案 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