a1 <- c("COL8A1/PRG4/DPT/ASPN/PODN/CCN1/BGN/MXRA5/MGP/COL16A1/MFAP5/THBS1/MATN2/AEBP1/MFAP4/SRPX/COL14A1/FGL2/ABI3BP/THBS2/LAMA4/COL8A2/FMOD/CTHRC1/COL12A1/OGN/PRELP/LTBP2/ANOS1")
a2 <- c("DPYSL3/CTSG/CCN5/CCN1/BGN/PCOLCE2/SLIT2/CCDC80/RSPO3/CFH/LYVE1/SFRP1/SLIT3/THBS1/SULF1/GPNMB/CCN2/SELP/THBS2/SPOCK2/RSPO1/PRELP/TGFBR3/LTBP2/LPL/HBEGF/ANOS1/NRP2/TGFBR2/CLEC3B/LXN/THBS4/SERPINE2/POSTN")
a3 <- c("CTSG/CCN5/CCN1/PCOLCE2/SLIT2/CCDC80/RSPO3/CFH/SFRP1/SLIT3/THBS1/GPNMB/CCN2/SELP/THBS2/RSPO1/PRELP/TGFBR3/LTBP2/LPL/HBEGF/ANOS1/NRP2/CLEC3B/LXN/THBS4/SERPINE2/POSTN/COMP/FBLN7/ECM2/SMOC2/SOD3")
a4 <- c("PDLIM3/MYH11/CNN1/SORBS1/FLNC/MYOM1/NEXN/ADD2/MYOZ3/MYLK/TAGLN/SHANK3/SYNE3/GSN/FAM107A/COBLL1/AIF1/LMOD1/TPM2/FLNA/SNCA/SPTBN1/TNNT3/VASH2/GMFG/S100A4/ENC1/KLHL4/WASF3/LMOD3/CORO1C/HCLS1/ABLIM2/TPM1/CALD1/ABLIM3/LIMA1/SVIL/FXYD5/NOS3/TNS1/SMTN/PLS3/MYH10/ENAH/WAS/EPB41L2/PLEC/MYO18A/ANG/MYO1C/MAP1A/MYO1F/EPB41L3/MTSS1/MAP1B/SNTA1/DMD/CNN3/PKNOX2")
b <- c(a1,a2,a3,a4)
如果我有一个特殊的元素,"CCN1",我如何识别向量b的哪个元素有"CCN1’,以及每个向量中的位置,a1、a2、a3和a4。我可以看到‘CCN1’是a1的第六个,a2的第四个,a3的第三个。
要确定向量b的哪个元素具有CCN1
、grep
或grepl
,可以使用
grep("CCN1", b)
#[1] 1 2 3
grepl("CCN1", b)
#[1] TRUE TRUE TRUE FALSE
为了获得位置,需要使用strsplit
在/
上分割字符串,然后可以再次使用grep
。
lapply(strsplit(b, "/", TRUE), grep, pattern="CCN1")
#[[1]]
#[1] 6
#
#[[2]]
#[1] 4
#
#[[3]]
#[1] 3
#
#[[4]]
#integer(0)
library(stringr)
str_which("CCN1", unlist(str_split(a1, "/")))
[1] 6
或者更普遍的
library(purrr)
library(stringr)
map(b, function(x) str_which("CCN1", unlist(str_split(x, "/"))))
[[1]]
[1] 6
[[2]]
[1] 4
[[3]]
[1] 3
[[4]]
integer(0)