Использование символа в функции grep в R - PullRequest
0 голосов
/ 27 марта 2020

У меня есть 600 символов n Я хотел бы применить функцию grep , используя все из них к b

n

[1] "KO_2"    "KO_12"   "WT_14"   "KO_16"   "WT_21"   "WT_35"   "KO_41"   "KO_44"   "KO_45"   "KO_47"   "KO_50"   "KO_57" 
[13] "WT_59"   "KO_60"   "KO_64"   "KO_65"   "KO_69"   "KO_70"   "KO_72"   "KO_81"   "KO_87"   "KO_88"   "WT_95"   "WT_105" 

b

[1] "KO_2"    "WT_3"    "WT_4"    "KO_6"    "WT_7"    "WT_8"    "WT_9"    "KO_10"   "KO_11"   "KO_12"   "WT_13"   "WT_14"  
  [13] "WT_15"   "KO_16"   "WT_17"   "KO_18"   "WT_19"   "WT_20"   "WT_21"   "WT_22"   "WT_24"   "WT_25"   "WT_26"   "WT_27"  
  [25] "WT_28"   "WT_29"   "WT_30"   "KO_31"   "KO_32"   "KO_33"   "KO_34"   "WT_35"   "KO_37"   "KO_38"   "WT_39"   "KO_40"  
  [37] "KO_41"   "KO_42"   "KO_44"   "KO_45"   "WT_46"   "KO_47"   "KO_48"   "WT_49"   "KO_50"   "KO_51"   "KO_52"   "WT_53"  
  [49] "WT_54"   "KO_55"   "KO_56"   "KO_57"   "WT_59"   "KO_60"   "KO_61"   "WT_62"   "KO_63"   "KO_64"   "KO_65"   "WT_66" 

Ответы [ 2 ]

2 голосов
/ 27 марта 2020
n <- c(letters[15:20], '1', '2', '3')
b <- letters

unlist(sapply(n, function(l) which(b == l)))

#  o  p  q  r  s  t 
# 15 16 17 18 19 20 

Вы можете использовать which, он сообщает вам индекс истинности теста. Теперь вам просто нужно применить это к вашему вектору букв для проверки.

РЕДАКТИРОВАТЬ:

Как упоминалось @Chris, если у вас есть несколько совпадений, вы должны быть осторожен. В этом сценарии вы можете удалить unlist(), и результатом будет список векторов, содержащих индексы совпадающих элементов. Обратите внимание, что элементы без совпадения также находятся в этом списке, но их соответствующий вектор пуст (integer(0))

n <- c("KO_2","KO_12","WT_14","KO_16","WT_21")
b <- c("KO_2","WT_14","KO_12","WT_14","KO_44","KO_45","KO_47","WT_35","KO_41")
sapply(n, function(l) which(b == l))
# $KO_2
# [1] 1
# 
# $KO_12
# [1] 3
# 
# $WT_14
# [1] 2 4
# 
# $KO_16
# integer(0)
# 
# $WT_21
# integer(0)
1 голос
/ 27 марта 2020

Чтобы узнать, где то, что вы называете «шаблонами» n, расположены в b, вы можете использовать match:

n <- c("KO_2","KO_12","WT_14","KO_16","WT_21")

b <- c("KO_2","WT_14","KO_12","WT_14","KO_44","KO_45","KO_47","WT_35","KO_41")

match(b,n)
[1]  1  3  2  3 NA NA NA NA NA

Это говорит о том, что шаблон 1 KO_2 занимает позиция 1 в b, шаблон 3 WT_14 имеет позиции 2 и 4 в b, шаблон 2 KO_12 находится в позиции 3 в b, в то время как ни у одного из других шаблонов в n нет совпадений в b.

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