我的样本数据集
df <- data.frame(period=rep(1:3,3),
product=c(rep('A',9)),
account= c(rep('1001',3),rep('1002',3),rep('1003',3)),
findme= c(0,0,0,1,0,1,4,2,0))
我想要的输出数据集
output <- data.frame(period=rep(1:3,2),
product=c(rep('A',6)),
account= c(rep('1002',3),rep('1003',3)),
findme= c(1,0,1,4,2,0))
我的条件是.... 我想根据以下条件从9中删除3条记录。
规则1:应符合第1,2,3期 规则2:所有期间的Findme值= 0 规则3:所有这3条记录(Preiod 1,2,3)应该具有相同的产品 规则4:所有这3个帐户(期间1,2,3)应该有一个帐户。
答案 0 :(得分:2)
如果我理解正确,您希望从产品帐户组合中删除所有记录,其中findme == 0,如果此组合中包含所有期间?
library(dplyr)
df %>%
group_by(product, account, findme) %>%
mutate(all.periods = all(1:3 %in% period)) %>%
ungroup() %>%
filter(!(findme == 0 & all.periods)) %>%
select(-all.periods)
# A tibble: 6 x 4
period product account findme
<int> <fctr> <fctr> <dbl>
1 1 A 1002 1
2 2 A 1002 0
3 3 A 1002 1
4 1 A 1003 4
5 2 A 1003 2
6 3 A 1003 0
答案 1 :(得分:1)
以下是data.table
library(data.table)
setDT(df)[df[, .I[all(1:3 %in% period) & !all(!findme)], .(product, account)]$V1]
# period product account findme
#1: 1 A 1002 1
#2: 2 A 1002 0
#3: 3 A 1002 1
#4: 1 A 1003 4
#5: 2 A 1003 2
#6: 3 A 1003 0