R語言:以多列標準篩選特定行

歡迎關注天善智能,我們是專注於商業智能BI,人工智能AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

對商業智能BI、大數據分析挖掘、機器學習,python,R等數據領域感興趣的同學加微信:tstoutiao,邀請你進入數據愛好者交流羣,數據愛好者們都在這兒。

作者:村長,數據科學、指彈吉他及錄音工程愛好者,浙大金融學博士在讀,在data.table包和MongoDB的使用上有較多經驗。

在前面

本期我們大貓二人組的村長在新的一年首先回歸,爲大家帶來新的推送。

在本期,我們會運用一個病例數據爲大家進行講解示範,這也是大貓課堂第一次針對閱讀者提問進行的反饋,也希望大家能提供一些有趣的問題,來和我們一起分享,同時也感謝讀者孤鶩惜秋,與我們分享其問題。話不多說,馬上進入正題。

題提出

在data.table語句中,i是用來進行行選擇的重要組成部分,很多情況下我們都需要以很多列的同一個特殊值進行行的選擇,大多數情況下,我們可能會針對所有的變量逐一寫出條件,例如a==1&b==1&c==1....但這樣的表達式很多時候並不方便和簡潔,有時甚至會出現許多問題。首先來看看下面這個數據:

3901436-009a2847e4c2705d

這是一個病例數據,包含多個患者的診斷的時間,以及多個診斷的結果,在這裏讀者便提出,需要在所有這些診斷結果裏面篩選出所有出現過醛固酮,但不包括繼發性醛固酮的所有行。在這裏如果對每一個條件進行輸入,需要輸入20多個變量的判定,而且這裏的變量名非常的髒,不利於變量名的輸入。我們先把這一行代碼優雅的放上來(PS:在運行這一行代碼前我們已經對數據進行了適當清洗,批量生成了22個帶'_xtrct'後綴的變量,觀察值是醛固酮、繼發性醛固酮或者無,但這部分批量生成的代碼不作爲這次講解的內容, 會在以後的公衆號推送中爲大家講解):

clinic <- clinic[rowMeans(clinic[, 31:52] == "醛固酮") > 0 & rowMeans(clinic[, 31:52] != "繼發性醛固酮") == 1]

我們再來看看結果:

3901436-9ab8f8164f2492be

結果非常出色,不過大家看到這一段語句是不是有點懵,不用着急,待小編慢慢講解。

碼解讀

裏層代碼

我們先從最裏面的一層代碼開始, 首先來看下面一段代碼的運行結果:

clinic[, 31:52] == "醛固酮"

3901436-dbb375cdbf4ed74e

從運行結果可以看出這是一個logic結果判定矩陣,裏面主要判定這個矩陣裏面是否是醛固酮, 如果是返回TRUE,如果不是返回FALSE,同理於代碼:

clinic[, 31:52] != "繼發性醛固酮"

判定是否觀察值裏面是否是繼發性醛固酮,如果不是返回TRUE,如果是返回FALSE。

外層代碼

下面來看外層代碼:

rowMeans(clinic[, 31:52] == "醛固酮") > 0

這裏運用了R語言中非常關鍵的一個知識點:對邏輯判斷值進行四則運算時,TRUE會被當做1,FALSE會被當做0, 這一點在這裏非常重要!!!!

那麼在這裏求每一行的均值,只要出現了醛固酮,那就會至少出現一個TRUE,那麼行的均值就肯定大於零,所以就將出現了醛固酮的行全都標記出來了,同理可得下面這行代碼:

rowMeans(clinic[, 31:52] != "繼發性醛固酮") == 1

標記出了所有沒有出現繼發性醛固酮的行。

這樣我們把這兩個條件合併在一起,然後配套上data.table的語句,就成了我們一開始出現的那條代碼:

clinic <- clinic[rowMeans(clinic[, 31:52] == "醛固酮") > 0 & rowMeans(clinic[, 31:52] != "繼發性醛固酮") == 1]

在結尾

應用好對象格式是R語言編程中的精髓之一,在這個例子中就很好的利用了對象格式裏面的格式性質,做了一些適當的變通處理,讓數據處理過程變得更加巧妙和方便,這點大家可以在以後的數據處理中做更多的嘗試和思考!

期預告

下一期我們將講述在這一次數據處理中遇到的另外一個問題,問題的內容已經在前文中說明。祝大家開工大吉!

轉載自公衆號:大貓的R語言課堂

3901436-fe4a27e060f7f306

往期精彩:

  還在用tm?你OUT啦!

從一件數據清洗的小事說起

用data.table語句批量處理變量

關於data.table中i,&nbsp;j,&nbsp;by都爲數字的理解

R語言:哪個函數解析時間最快?

3901436-60a7be96bc2c9eb3

公衆號後臺回覆關鍵字即可學習

回覆 爬蟲            爬蟲三大案例實戰

回覆 Python       1小時破冰入門

回覆 數據挖掘     R語言入門及數據挖掘

回覆 人工智能     三個月入門人工智能

回覆 數據分析師  數據分析師成長之路 

回覆 機器學習     機器學習的商業應用

回覆 數據科學     數據科學實戰

回覆 常用算法     常用數據挖掘算法