2012-08-29 100 views
1

假設我有一個這樣的數據幀:的行子集的數據幀等於一個值,但其他

df <- data.frame(id = rep(c(1001:1004), each = 3), value = c(1,1,4,1,2,3,2,2,5,1,5,6)) 

df 
    id value 
1 1001  1 
2 1001  1 
3 1001  4 
4 1002  1 
5 1002  2 
6 1002  3 
7 1003  2 
8 1003  2 
9 1003  5 
10 1004  1 
11 1004  5 
12 1004  6 

什麼是返回我有值等於13的ID的好辦法,即,具有其相應的值的任何ID等於3將被排除,但是必須至少有一個值等於1?在這種情況下,ID 10021但也有3並應被排除在外。 ID 1003沒有任何價值等於1和應得被排除。因此將返回ID 1001 and 1004。謝謝!

回答

3

你可以得到包含1 df$id[df$value == 1]的ID的,同樣爲3 df$id[df$value == 3]。要從另一組中排除一組,您可以使用setdiff

在一個命令:with(df,setdiff(id[value == 1],id[value == 3]))

0

這是另一種選擇。

unique(df$id[df$value==1][! df$id[df$value==1] %in% df$id[df$value==3]]) 
[1] 1001 1004 
相關問題