двойное соответствие data.frame - PullRequest
1 голос
/ 04 октября 2011

Я хотел бы сделать двойное совпадение на data.frame для извлечения индексов строк.Например, в следующем файле data.frame я хочу сначала сопоставить в match1, а в каждом элементе match1 - в match2.Думайте об этом как о двойной сортировке (сначала по имени, затем по дате) за исключением того, что я не сортирую, я сопоставляю

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 )

Ответы [ 2 ]

5 голосов
/ 04 октября 2011

Обратите внимание, что для того, чтобы ваш код работал так, как написано, вам нужна загруженная библиотека zoo (она маскирует as.Date)

library("zoo")

Кажется, что вы хотите, это указатели data.frame, которые соответствуют data.frame, отсортированному по name согласно match1, а затем по date по match2. Вы можете использовать факторы для создания этого заказа, а затем order для получения указаний.

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

as.character необходим, чтобы привести даты к символам, чтобы их можно было превратить в факторы с правильным порядком.

0 голосов
/ 04 октября 2011

Один из способов проверки на двойное совпадение - выполнить двойную сортировку по «test» (назовите этот test2) и проверить на равенство «test» и «test2»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...