2016-06-17 4 views
0

У меня есть кадр данных, в котором некоторые идентификаторы появляются более одного раза. Я выбрал эти идентификаторы однозначно, и теперь у меня есть вектор с идентификаторами выборки. Теперь мне нужно создать логический, который сообщает мне, какие строки в фрейме данных имеют идентификаторы, которые также отображаются в моем примере.Как сравнить кадр данных с дубликатами и вектором?

Я пробовал функцию состязания, но он выбирает только первый вид, и мне нужны все видимости.

Я также попытался слить, но набор данных большой, поэтому нет памяти для этого.

+0

'mydf $ idcol в% idsample'% для логического индекса. –

+0

@PierreLafortune Что такое этикет в этой ситуации? Является ли мой ответ слишком большим, чем ваш комментарий, или я должен его удалить? Я в порядке. – lmo

+0

Не удаляйте, я оставил комментарий, вы можете ответить, чтобы развернуть с примерами –

ответ

2

Вы можете использовать %in%, чтобы получить логический вектор и which вместе с in, чтобы получить индексы строк. Вот воспроизводимый пример, который содержит повторяющиеся идентификаторы.

set.seed(1234) 
df <- data.frame(id=sample(1:80, 100, replace=TRUE), b=rnorm(100)) 
mySample <- seq(1, 80, by=6) 

#logical vector length of nrow(df) 
myRows <- df$id %in% mySample 
# row indices 
myIndices <- which(df$id %in% mySample) 
2

Это то, что вы можете сделать с помощью match (как вы пытаетесь эту функцию):

x=match(df$id, mySample, nomatch = 0) > 0 

, который дает вам логический вектор, TRUE если df$id появляется в mySample и FALSE иначе.

Чтобы получить соответствующие индексы:

which(x==T)