Подставить фрейм данных на несколько уровней факторов [дубликаты]

На этот вопрос уже есть ответ:

Выберите строки из фрейма данных на основе значений в векторе 3 ответа

Как можно избежать использования цикла для подмножества фрейма данных на основе нескольких уровней факторов?

В следующем примере мой желаемый вывод - это фрейм данных. Фрейм данных должен содержать строки исходного фрейма данных, где значение в «Коде» равно одному из значений в «выбранном».

Рабочий пример:

#sample data
Code<-c("A","B","C","D","C","D","A","A")
Value<-c(1, 2, 3, 4, 1, 2, 3, 4)
data<-data.frame(cbind(Code, Value))

selected<-c("A","B") #want rows that contain A and B

#Begin subsetting
result<-data[which(data$Code==selected[1]),]
s1<-2
while(s1<length(selected)+1)
{
  result<-rbind(result,data[which(data$Code==selected[s1]),])
  s1<-s1+1
}

Это игрушечный пример гораздо большего набора данных, поэтому «выбранные» могут содержать большое количество элементов, а данные - большое количество строк. Поэтому я хотел бы избежать цикла.