2015-09-19 106 views
3

我需要刪除一些從我的數據框中複製的記錄。但只有特定組合的重複。刪除特定組合的重複項

例如,從此示例Id|Status我想刪除狀態爲'B'的重複項。也就是說,狀態「A」可以出現多次,但狀態「B」只能出現每一次「ID」

1 A 
1 A 
1 A 
1 A 
2 A 
2 A 
1 B 
2 B 
2 B 

應該導致:

1 A 
1 A 
1 A 
2 A 
2 A 
1 B 
2 B 

這將是最好的方式做到這一點?

測試數據:

test <- data.frame(id=c(1,1,1,1,2,2,1,2,2)) 
test$status <- c("A","A","A","A","A","B","B", "B") 
+0

與你的病情就過濾:'DF1 [DF1 $狀態= 「B」 |! !'duplicated(df1),]' – bergant

回答

5

這可能會做你想要什麼。如果您測試平等,當第二列值爲NA時可能會出現問題。 x == "B"將是NA,然後結果中會有NA行。

test <- read.table(text="1 A 
1 A 
1 A 
1 A 
2 A 
2 A 
1 B 
2 B 
2 B") 
test[ !(duplicated(test) & (test[[2]] %in% "B")) , ] 
#-------  
    V1 V2 
1 1 A 
2 1 A 
3 1 A 
4 1 A 
5 2 A 
6 2 A 
7 1 B 
8 2 B 
+0

我用'test [!duplicated(test)&(!test [[2]]%'%'B'),''''使用我添加的測試數據嘗試過,它沒有工作:( – vtortola

+0

對,需要一些分組,看看編輯是否令人滿意。 –

1

使用dplyr,你可以這樣做:

library(dplyr) 
noDups <- "B" 
test %>% group_by(status, id) %>% 
filter(!(status %in% noDups) | row_number()==1)