2016-09-19 8 views
1

У меня есть кадр данных, который содержит два типа cols и vector с именами. Как выбрать некоторые строки в кадре данных с векторными строками.соответствует шаблонам в векторе со строками в кадре данных

name = c("[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]") 
expression = c(118.84, 90.04, 106.6, 104.99, 93.2, 66.84, 90.02, 108.03, 111.83) 
dataset <- as.data.frame(cbind(name, expression)) 
nam <- c("HPS5", "HPS6", "HPS9", "HPS2") 

Функция должна возвращать дату кадр только для указанных линий я стараюсь dataset[mapply(grepl,nam,dataset$name)] , но это не сработало

ответ

1

Мы можем использовать paste с collapse на «Нама», использовать его в качестве pattern аргументом в grep, получить индекс и подмножество в 'набор данных'

dataset[grep(paste(nam, collapse="|"), dataset$name),] 

Если мы используем код OP, оберните столбец «name» внутри list, иначе mapply будет проходить через отдельные элементы «name» и, поскольку числовые элементы не являются одинаковыми в «name» и «nam», , это вызовет предупреждение о longer argument not a multiple of length of shorter. mapply вернет логическую матрицу, из которой мы берем rowSums и проверяем, больше ли она, чем 0, чтобы получить логический вектор для подмножества строк.

dataset[rowSums(mapply(grepl, nam, list(dataset$name)))>0,] 

 Смежные вопросы

  • Нет связанных вопросов^_^