2016-01-07 63 views
0

說我有以下數據幀,dfř通過在多個列上平等邏輯索引

  A B  C 
    1  4 25  a 
    2  3 79  b 
    3  4 25  c 
    4  6 17  d 
    5  4 21  e 
    6  5 25  f 

如何I指數其中在某些列中的元素的向量匹配線,例如df$A == 4 & df$B == 25

我會想到這樣的:df[df[,c("A", "B")] == c(4, 25),]會工作,但這並不給我正確的答案(它不會返回任何行)。

我想要一個使用列名稱向量匹配的方法,以及要匹配的值向量。

+1

爲什麼不'是myDF [myDF上$ A == 4是myDF $ B == 25 ,]'? – Jaap

+0

因爲我想靈活地動態指定要匹配的列和值 – Tom

回答

2

試試這個:

df[colSums(t(df[,c("A", "B")]) == c(4, 25))==2,] 
    x A B C 
1 1 4 25 a 
3 3 4 25 c 

這工作循環的載體c(4, 25)

+0

很好,非常感謝,可以通過以下方式改進它: 'df [apply(t(df [,c(「A」,「B 「)])== c(4,25),全部,2)'sp你可以有可變長度的列?無論哪種方式,非常感謝 – Tom

+0

您的意思是像'df [apply(t(df [,c(「A」,「B」)])== c(4,25),2,function(x)sum(x )== 2),]'?如果你認爲這是一個改進... – DatamineR

1

你也可以使用一個簡單的merge,這將有類比爲data.tabledplyrsql還有:

merge(df, setNames(list(4,25),c("A","B"))) 
# A B C 
#1 4 25 a 
#2 4 25 c