討論學習R的grepl函數,附入群方式

2021-02-20 生信交流平臺

俗話說,「獨學而無友,則孤陋而寡聞」。

為了方便大家交流學習,共同進步,我特地創建了微信交流群

長按二維碼加入「生信交流群」

後臺留言「生信交流群」入群


    廢話不多說,我們來聊聊今天的正題。昨天有位群友在群裡提出了這樣一個問題

    具體的字符串向量是這樣的,需要達到的目的就是,看字符串向量裡面的每一個元素是否包含"LIPE2"這個基因。這裡的字符串向量有四個元素。

實現的手段就是通過R的grepl函數

    這個函數裡的pattern是匹配的模式,也就是我們經常聽到的正則表達式。如果對正則表達式還不了解的小夥伴,可以參考☞正則表達式☜。x就是要查看是否滿足pattern的字符串向量,如果匹配pattern就返回TRUE,不滿足就返回FASLE。

    

    這位群友所提出的問題,tricky的地方在於LIPE2這個基因有時候存在於字符串的中間,有時候存在於開頭,有時候又存在於末尾,並且還需要考慮一些幹擾項比如LIPE23這個基因也能夠匹配LIPE2,似乎很難通過一個正則表達式來實現。後來這位群友自己解決了這個問題,方法就是通過來實現。既然一個正則表達式無法滿足需要,那就多寫幾個正則表達式,把所有可能的情況都考慮進去。

這個問題引起了群裡關於正則表達式激烈的討論,

其實,在這個群友提出這個問題之前,我還不太確定,pattern裡面可以使用或(|),通過討論大家都有所收穫,至少群裡的其他小夥伴知道了正則表達式這個概念。以後遇到相似的問題,也知道怎麼解決了。


    今天我又仔細的研究了一下,給出了三種實現的方法,供大家交流學習。我又加入了一個幹擾項,讓這個正則表達式更全面。

s <- c("ABCLIPE2",        "LIPE-AS1,LIPE,CXCL17",       "LIPE-AS1,LIPE2,LIPE,CXCL17",        "LIPE2",         "LIPE23")  

方法一,直接匹配所有可能的情況

grepl("^LIPE2$|,LIPE2,|^LIPE2,|,LIPE2$",s)


方法二,利用\b,單詞邊界


方法三,利用strsplit和%in%

sapply(s,function(x){  'LIPE2' %in% strsplit(x,',')[[1]]})

返回的結果是

如果對strsplit還不熟悉的小夥伴,其實可以先輸出來看看結果

sapply(s,function(x){  strsplit(x,',')[[1]]})

 返回的結果是分割之後的字符串向量

參考資料:

正則表達式

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/strsplit

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/grep


往期精彩:

你的贊同是我前進的動力

相關焦點

  • 【R函數學習】R語言時間序列函數整理
    #arma模型library(fUnitRoots) #進行單位根檢驗library(FinTS) #調用其中的自回歸檢驗函數library(fGarch) #GARCH模型library(nlme) #調用其中的gls函數library(fArma) #進行擬合和檢驗【基本函數
  • R | 字符型數據處理
    ,fixed=TRUE)[[1]][1] "a" "b" "c"直接使用split函數得到的結果是一個列表,如果希望得到一個向量,可以使用unlist函數。), 4)[1] "07" "66"從左端起取字符串的特定長度子串strtrim(x,width)> strtrim(c("abcdef", "abcdef", "abcdef"), c(1,5,10))[1] "a" "abcde" "abcdef"二、字符串匹配字符串匹配主要有grep、grepl
  • R語言時間序列函數大全(收藏!)
    library(fGarch) #GARCH模型library(nlme) #調用其中的gls函數library(fArma) #進行擬合和檢驗數學函數abs,sqrt:絕對值,平方根 log, log10, log2 , exp:對數與指數函數 sin,cos,tan,asin,acos,atan
  • 我的R語言學習方法
    1)為什麼要學習R語言,即學習R語言的目的和動機2)怎麼學習R語言,即學習R語言舉措和行動3)要學習R語言的什麼,即學習的結果和成果給大家一分鐘時間,大家可以思考一下,可以把答案在後面留言或者進入R語言公眾號,加入群,一起討論。我說一下自己的Why-How-What。
  • 如何學習好R語言?【全套R語音書籍+視頻下載】
    包括了閱讀經典的教材、代碼、論文、學習公開課。 - 通過牛人來學習。 包括同行的聚會、討論、大牛的博客、微博、twitter、RSS。 - 通過練習來學習。 包括代碼練習題、參加kaggle比賽、解決實際工作中的難題。 - 通過分享來學習。 包括自己寫筆記、寫博客、寫書、翻譯書,和同伴分享交流、培訓新人。# 全套R語音書籍下載。關注公眾號後,回覆:R語言
  • 「R」用purrr實現迭代
    本文來源於 2018 年學習《R for Data Science》寫的筆記。一起複習一下吧~函數有3個好處:除了函數,減少重複代碼的另一種工具是迭代,它的作用在於可以對多個輸入執行同一種處理,比如對多個列或多個數據集進行同樣的操作。
  • 蒙特卡洛方法-練習使用概率密度函數
    簡介先前的文章我們了解了概率密度函數是何物,現在開始來練習一下概率密度函數。
  • Excel函數打卡學習群
    即使在表格中用到函數,可能也只是sum求和或者vlookup匹配。這兩個函數確實是使用最普遍的,而且功能也基本上滿足常用的求和、匹配需求。其實不然,excel的強大遠不止與此。我在學習excel函數的過程中,真是越學越感覺它的妙處無窮。比如,我舉個例子:求和小紅在9月2日的分數。
  • EXCEL函數學習13——IF函數
    【標籤】 excel函數、邏輯函數前邊我們講到了很多涉及IF的函數,比如SUMIF
  • DataFrame(12):數據轉換——apply(),applymap()函數的使用
    1、apply()函數1)apply()函數作用① apply()函數作用於Series
  • DataFrame(10):數據轉換——map()函數的使用
    1)map()函數作用將序列中的每一個元素,輸入函數,最後將映射後的每個值返回合併,得到一個迭代器。2)map()函數原理圖原理解釋:上圖有一個列表,元素分別是從1-9。map()函數的作用就是,依次從這個列表中取出每一個元素,然後放到f(x)函數中,最終得到一個通過函數映射後的結果。3)map()內置函數和Series的map()方法① map作為python內置函數的用法
  • 如何入門R語言
    在學習R語言之餘,我在大四也先把部分研究生課程旁聽了一遍。其中,多元統計分析和貝葉斯統計課後都會有大量的習題和案例需要程序實現。這使得我們R語言學習不再是漫無目的的遊擊戰,而是需求明確的精準打擊。在花了一個禮拜刷了《R語言實戰》的前五章後,我認為我掌握了R基本的數據結構和一些比較常用的函數(這個時候我已經基本拋棄Excel了),然後我就根據每個禮拜的作業題開始跳躍性地學習了。
  • MATLAB基礎教程(xlsread和xlswrit函數+數據擬合+數值計算)
    -1.403 1.8536 8.2698 故多項式的結果為:2.2 工具箱擬合        打開工具→基本擬合,選定擬合的方式,也可以嵌套使用;m=conv(conv(u,p),v) %多項式相除deconv[q,r]=deconv(w,v) %q為商,r為餘數;結果:w = 20 80 190 280 270 180m = 20 120 410
  • DataFrame(11):數據轉換——apply(),applymap()函數的使用
    1、apply()函數1)apply()函數作用① apply()函數作用於Series和Series的map()方法作用是一樣的,依次取出Series中的每一個元素作為參數,傳遞給function函數,進行一次轉換。
  • INDIRECT函數跨表兩種常用引用方式
    其實這個函數很簡單,在Excel中有兩種引用方式:1、直接引用90%的情況下都是用這種,滑鼠直接引用區域。直接引用區域方便快捷,也容易理解。=興業銀行!P54這時,嵌套INDIRECT函數,就是告訴Excel,我是通過單元格間接引用每個表格,不是通過滑鼠一個個點擊引用的。=INDIRECT(B4&"!
  • Excel之VBA常用功能應用篇:excel條件選擇函數
    excel條件選擇函數 使用自定義函數快速連接Excel表格中多單元格數據的方法,我們在工作中會遇到很多文章,像excel條件選擇函數這類問題應該大家也都遇到過吧
  • matlab常用函數大全
    點k 黑色 o 圓w 白色 x x b 藍色 + + g 綠色 * * r 紅色 - 實線c 亮青色 : 點線m 錳紫色 -.surf 3D 陰影表面圖surface 建立表面低層對象surfc 海浪和等高線的結合surfl 具有光照的 3D 陰影表面trimesh 三角網格圖Matlab 函數大全信源 函數randerr 產生比特誤差樣本randint 產生 均勻分布 的隨機整數矩陣
  • 函數作圖 – 利用函數性質(2)
    所謂觀全局,就是在整個定義域範圍內,把握函數值變化的整體特徵;定轉折,就是確定函數的特殊點或特殊線,而函數的特徵在這些轉折點會發生一些變化,例如過零點,在過零點的左側或右側,函數值從負到正或者從正到負;尋捷徑,就是判斷函數是否具有對稱性或周期性等,簡化函數作圖的過程。接下來,我們將從多項式函數的性質出發,討論函數作圖的基本方法。
  • Excel函數學習45:DATEDIF函數
    圖1 什麼情況下使用DATEDIF函數?DATEDIF函數根據指定的時間單位返回兩個日期相差的年數、月數或者天數。它能夠:計算年齡或工齡計算月數或天數僅計算天數或月數差精確計算兩個日期之間的時間差 DATEDIF函數語法DATEDIF函數有3個參數,其語法如下: DATEDIF
  • 最便捷的3種方式
    python讀寫excel的方式有很多,這裡我介紹3種方式,一種是利用xlrd和xlwt進行excel讀寫,一種是openpyxl讀寫,最後一種是利用