首页 > 解决方案 > 在 R 的 grep 函数中使用字符

问题描述

我有 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" 

标签: r

解决方案


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)

推荐阅读