2011-10-03 30 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