2011-10-03 54 views
1

我想對data.frame進行雙重匹配來提取行索引。例如,在下面的data.frame中,我想先匹配match1,然後在match1的每個元素中匹配match2。可以把它看作一個雙排序(最早由名稱,然後按日期),除了我沒有排序,我匹配檢查雙賽double match a data.frame

test = data.frame(name = c("bob" , "jane","adam","jane" ,"bob" , "adam") , date = as.Date(c(1,2,2,1,2,1))) 
match1 = c("jane" , "adam", "bob") 
match2 = c(as.Date(c(2,1))) 
result = c(2,4,3,6,5,1) 

回答

5

注意,對於所寫的代碼工作,你需要的zoo庫加載(它掩蓋as.Date

library("zoo") 

它看起來像你想要的那樣data.frame的痕跡對應於th e數據幀根據match1name排序,然後根據match2date排序。您可以使用因素來創建此訂購,然後使用order來獲取這些訂單。

order(factor(test$name, match1), factor(as.character(test$date), as.character(match2))) 

as.character需要要挾日期字符,以便它們可以變成因素與正確的順序。

+0

很棒!你對動物園是對的。非常感謝! – SFun28

0

一種方法是做一個雙 - 類別上的「測試」(這個測試2)和測試的「測試」的平等和「測試2」

+0

呵呵?我不是在嘗試進行雙重排序,我試圖進行雙重比賽。我試圖提取指數,而不是測試平等。 – SFun28