R語言從入門到精通:Day5-R語言數據操作示例及數據

2021-02-07 科研貓

經過前面幾次推文的學習,相信大家對R語言已經有了一個大概的了解,同時也初步感受了R語言在數據處理領域的強大功能,不過實話實說,前面的內容還只是R語言應用的冰山一角而已。從這次推文開始,我們就要正式開始接觸R語言對數據處理的強大能力。

在正文內容開始之前,我先給大家推薦一個文檔https://google.github.io/styleguide/Rguide.xml

相信很多同學在前幾次推文的指導下,練習R代碼編寫的時候會發現,R語言和其他程式語言不太一樣的地方,比如:<- 和 = 都可以給變量賦值,兩者都可以作為賦值符,兩者我該用哪個?同時,有些操作符前後有空格,有些又沒有,到底該怎麼寫才對?除此之外,R語言的換行和縮進似乎也不像python那麼嚴格。那我們平時自己寫代碼的時候應該遵循什麼樣的規則呢?

上面提到的這個文檔就可以解答大家的這些疑問。這個文檔是Google’s R Style Guide,眾所周知,醫生在臨床上工作有臨床指南,那程式設計師工作也有「指南」,上面的這個文檔就是我們寫R代碼的指南。具體我這裡不展開來講,希望大家好好看看,務必遵守!!!

話不多說,我們進入這次課程的主要內容,上節課中完成了R語言中的數據導入工作,那麼這次課程的主要內容就是給大家介紹一些數據管理和操作的基本函數或語句。

1、本節內容重點內容較多,

      務必緊跟紅色標記。

2、測試數據及代碼

      見文末客服小姐姐二維碼。

一般來說,創建新變量是項目中必不可少的步驟。舉個例子,有一個數據框mydata,其中有兩列變量x1,x2。現在要求創建兩個新的變量x3,x4,其中x3是變量x1,x2的加和,x4是x1,x2的均值。下面有三個實現方式的示例:

圖1:創建新變量的三種方式。

第一種方法是通過賦值操作在數據框mydata中生成新的兩列;第二種方法是通過attach函數加載mydata,賦值生成新的兩列數據,再detach取消加載mydata數據框;第三種方法是通過transform函數把數據列合併在一起。大家可以根據自己的習慣來選擇其中一種方法實現(跟大家講個悄悄話:我喜歡第一種方法,直接明了)。同時我們也跟大家講一下R裡面的常用運算符:加(+)、減(-)、乘(*)、除(/)、求冪(^或者**)、求餘(%%)、整數除法(%/%,如5%/%2=2)。

變量的重命名很好理解,變量的重編碼的含義是根據一個或者一組變量的現有值創建新值的過程,比如,項目中要求將錯誤的數據改為準確值、將學生的百分製成績改為等級製成績等等。這個過程中邏輯運算發揮了很重要的作用。說到邏輯運算,就是對TRUE和FALSE兩個邏輯變量的運算,邏輯運算符包括&(與)、| (或)、!(非)三種。我們以如圖2中的一組數據來進行示範。

圖2:示例數據

首先我們把age=99的數據改為缺失數據,然後將age重編碼為等級制變量agecat,代碼如圖3。

圖3:變量的重編碼

這樣我們發現處理完之後數據有了變化:

圖4:注意最後一列agecat。

實際上變量重編碼是一個很複雜的問題,絕不僅僅是像上面兩步操作那麼簡單的。其中,car包中的recode()和doBy包中的recodevar()、R語言中自帶的cut(),這三個函數都是很受歡迎的變量重編碼函數。

相比於重編碼,重命名就不那麼神秘了,通過names()函數可以更改數據框的行名和列名。下面給大家舉幾個變量重命名的方法,大家可以自己動手試一下,感受一下這三個語句的效果。

圖5:變量重命名的方法。

*plyr包是一個集合了很多數據集操作函數的R包,大家可以查看其幫助文檔進一步學習。

幾乎所有項目中,都存在缺失值,在R中缺失值用NA代替(前面我們已經見過了)。R語言提供了一個簡單而重要的函數is.na()來監測數據集中的缺失值。下面是該函數的一個使用實例。


圖6:使用is.na()函數

數據集leadership中缺失值NA的位置都被標記上了TRUE。

這個函數簡單在於用法簡單易記,重要在於R語言中不存在x == NA來判斷變量x是否為缺失值的用法!!!值得一提的是,NA只是表示缺失值,和無效運算產生的結果NaN是不一樣的。

我們在前面已經實驗過了重編碼某些值為缺失值的用法,就是將age為99的值標記為缺失值的步驟(如圖3)。這一步雖然很簡單,但在一些項目中如果遺漏了這個步驟,會對結果產生巨大的影響!

在識別和編碼了缺失值之後,我們該怎麼處理這些可惡的缺失值呢?缺失值的插補是一個非常複雜的問題,如果你的數據有很大一部分都是缺失值,你或許應該先去問問提供數據的人,為什麼會有缺失值。或者,等我們後續課程專門講解缺失值插補的操作。如果你的數據中只是存在很小一部分缺失值,直接刪除這些麻煩的缺失值是一個理想的選擇。R語言中提供了函數na.omit()來刪除帶有缺失值的行(如圖7)。

圖7:函數na.omit()的使用。

在R語言中的很多數值函數都有一個na.rm=TRUE的可選參數,比如函數sum()。這個參數可以在計算之前就移除缺失值並使用剩餘值計算(如圖8)。

圖8:函數sum()中na.rm=TRUE的舉例

總之,缺失值的處理是一個很複雜的問題,在刪除缺失值對總體影響很小的情況下,這是最理想的選擇。

學過任何一門程式語言的同學都不會對數據類型陌生,有些語言中的數據類型轉換甚至難倒了很多人。R語言中不會出現這種情況了,它為我們提供了一系列用來判斷某個對象的數據類型和將其轉換為另一種數據類型的函數,如圖9。

圖9:類型判斷與轉換函數。

下面圖10是一個簡單的示範。

圖10:數據類型判斷和轉換函數的使用

數據中比較特殊的一類就是日期數據,R語言中日期值通常以字符串的形式輸入,然後轉換為數值形式存儲。類似上面用到的as.datatype()函數,函數as.Date()用於執行這個轉換過程,具體用法為:as.Date(x, 「input_format」)。參數input_format給出讀入日期x的適當格式。具體用法見下圖11。日期格式的列表如圖12,表中詳細羅列了不同日期格式的格式符號。

圖11:日期的轉換

圖12:日期格式

數據的排序在R語言中可以說比在Excel中還要簡單了,簡單給大家展示一下函數order()的用法。如圖13,分別按照age和同時按照gender、age對leadership數據集進行了排序。此外,排序的函數還有sort()和rank(),可以自制試試看不同函數的用途哦。

圖13:函數order()的用法。

有時候數據並不是一個整體,需要自己整合一下。R語言中常用的合併數據集的函數有merge()、cbind()rbind()。其中函數cbind()是將兩個矩陣或者數據框直接橫向合併,要求被合併的兩個對象有同樣的行數。

如果要在數據框中添加行(或者理解為將兩個數據框縱向合併),使用函數rbind(),要求兩個數據框有相同的變量,不過順序不必要相同。一般用於向數據框中添加新的觀測。

函數merge()的用法就稍微複雜一點,下面還是用leadership數據集給大家舉一個簡單的例子,如圖14。

圖14:函數merge()的使用

簡單來說,就是把leadership和leadership.new兩個數據集按照變量managerID、date進行了合併,用於給觀測添加新的數據。

在前面介紹R語言中數據類型的推文中我們已經展示過選擇數據框中某幾列數據的方法,下面我們為大家展示選擇或者剔除變量(觀測)的幾種常用方法。如圖15.

圖15:數據取子集的操作實例。

篇幅有限,就不給大家展示代碼的運行結果了。圖裡面值得注意的是%in%這個運算符,它的主要功能是判斷一個向量中的元素是否在另外一個向量中。還有一個重點就是函數subset()。這個函數可以獨立解決取一部分觀測和一部分變量的工作,是數據集取子集最簡單的方法了。

相信大家都有體會,我們的難度在逐漸增大。本次課程的重點是R中的常用數據操作,這個是數據挖掘的基礎,其實說難也不難,掌握幾個函數,後面的操作就簡單多了。希望大家不要氣餒,堅持學習,精通R語言指日可待哦。

本期乾貨

·

!R語言數據操作示例及數據!

關注科研貓公眾號,在後臺回復關鍵詞「R5」獲取本篇推文乾貨連結,獲取後請儘快轉存或收藏以免連結過期。



更多科研新鮮資訊、文獻精讀和生物信息技能

關注科研貓

相關焦點

  • R語言從入門到精通:Day6-R語言數據操作進階及控制結構
    數據處理是R語言和數據挖掘的重要基礎,要求大家務必熟練操作,所以今天我們就從一個簡單的實例出發,給大家繼續講解數據處理進階及控制結構。1、本節內容重點內容較多,      務必緊跟紅色標記。2、測試數據及代碼      見文末客服小姐姐二維碼。
  • R語言從入門到精通:Day1
    今天是我們的系統教程《R語言從入門到精通》的第一講,前面的背景講解中《從今天開始,每天學點R語言~》,已經深入探討過R語言的重要性以及學習R語言的必要性
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    到目前為止,R語言的數據操作和基礎繪圖部分已經講解完畢,換句話說,大家應該已經能將數據導入R中,並運用各種函數處理數據使其成為可用的格式,然後將數據用各種基礎圖形展示
  • R語言從入門到精通:Day1-R語言的安裝
    今天是我們的系統教程《R語言從入門到精通》的第一講,前面的背景講解中《從今天開始,每天學點R語言~》,已經深入探討過R語言的重要性以及學習R語言的必要性
  • R語言從入門到精通:Day2
    今天,我們就開始進入到《R語言從入門到精通》的第二節:R和RStudio的使用。上節課程中,我們講解了R和RStudio的安裝,本節內容我們來學習如何使用他們。有同學可能覺得簡單,那不就是打開軟體直接敲擊幾個命令就行了嘛。其實不然哦,R和RStudio是我們這一系列課程最重要的基礎,特別是RStudio的使用,所以我們有必要把它們兩個詳細系統地給大家講解一下。
  • R語言從入門到精通:Day14(PCA & tSNE)
    今天,我們就從PCA的數理統計層面入手,去講講完整的PCA應該怎麼操作。總體而言,PCA是一種數據降維技巧,它能將大量相關變量轉化為一組很少的不相關變量,這些無關變量就稱為主成分。例如,使用PCA可將30個相關(很可能冗餘)的環境變量轉化為5個無關的成分變量,並且儘可能地保留原始數據集的信息。主成分是觀測變量的線性組合。
  • 關注 | R語言從入門到精通:Day4-R語言數據導入測試代碼及數據
    這些數據類型在我們運用R語言解決實際問題的時候都非常有用,在上節的例子中我們是在R裡面直接生成的數據,但是實際數據分析中,如何快速靈活的讀取和處理多種格式的外部數據呢?這節課的主要內容,我們就來講講R語言中數據的讀取。1、本節內容重點內容較多,      務必緊跟紅色標記。2、測試數據及代碼      見文末客服小姐姐二維碼。
  • R語言 | 數據操作dplyr包
    [更新~] Python網絡爬蟲與文本數據分析公眾號只帶著Python字眼,卻分享著R語言,不務正業,任性了~dplyr簡介dplyr是R語言的數據分析包,很像python中的pandas,能對dataframe
  • R語言從入門到精通:Day13-R語言回歸分析
    其實上面的內容已經概括了R中廣義線性模型擬合的主要過程,下面給出分別關於Logistic 回歸和poisson回歸的兩個示例。以AER包中的數據框Affairs為例,我們將通過探究婚外情的數據來闡述Logistic 回歸的過程。
  • Day7:R語言課程 (R語言進行數據可視化)
    library(purrr)  # Load the purrrsamplemeans <- map_dbl(rpkm_ordered, mean) 可以將這個包含的12個元素的向量作為一列,添加到metadata數據框中,從而將平均表達量與實驗metadata相結合。cbind()或「rbind()」函數可以實現。
  • R語言數據清洗實戰——高效list解析方案
    但是包容性最強也也意味著他對於內部子對象的類型限制最少,甚至內部可以存在遞歸結構,這樣給我們提取數據帶來了很大的困難。如果你對R語言的list結構非常熟悉,又熟練控制流等函數的操作,自然可以通過構建循環來完成目標數據的提取。但是在數據量大、結構及其複雜的情形下,自建循環無論是性能還是代碼量上都很不經濟。
  • R語言從入門到精通:Day15(聚類分析)
    我們嘗試聚類個數為5(四個判定準則贊同,如圖2)的情形。圖3:聚類個數為5從概念上講,K-means算法如下:(1) 選擇K個中心點(隨機選擇K行);(2) 把每個數據點分配到離它最近的中心點;(3) 重新計算每類中的點到該類中心點距離的平均值(也就說,得到長度為p的均值向量,這裡的p是變量的個數);(4) 分配每個數據到它最近的中心點;(5) 重複步驟(3)和步驟(4)直到所有的觀測值不再被分配或是達到最大的迭代次數
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    回歸作為一個廣義的概念,涵蓋了許多變種,R語言中也為其提供了強大而豐富的函數和選項(但顯然選項越多,對初學者越不友好),早在2005年,R中就有200多種關於回歸分析的函數 (https://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf,這個文檔提供了部分回歸分析函數列表,供大家參考)。
  • R語言學習路線和常用數據挖掘包
    對於初學R語言的人,最常見的方式是:遇到不會的地方,就跑到論壇上吼一嗓子,然後欣然or悲傷的離去,一直到遇到下一個問題再回來。那麼,眾多書籍中,一個生手應該從哪一本著手呢?入門之後如何才能把自己練就成某個方面的高手呢?相信這是很多人心中的疑問。有這種疑問的人有福了,因為筆者將根據自己的經歷總結一下R語言書籍的學習路線圖以使Ruser少走些彎路。本文分為6個部分,分別介紹初級入門,高級入門,繪圖與可視化,計量經濟學,時間序列分析,金融等。
  • R語言-初識與數據結構
    S語言:1976年貝爾實驗室發展起來的數據交互分析系統;是一種高級程序語言,很好地統計應用快速開發系統。最新版本連結如下:https://cran.r-project.org/src/base/R-4/deprecated:由於R版本問題會出現函數棄用。已經到了4.0.3,通常大版本號的更新會伴隨著軟體包的不穩定。敲黑板:如何通過命令升級R版本,並複製老版本所有的包呢?
  • 30 天學會R語言 DAY 2:R 程序和數據介紹
    >本文來了解下R語言關鍵的組成部分:R程序和R數據R語言程序主要由R程序及其分析結果組成1.>R語言也可以不用 c( ),直接產生連續等距數據:> x3<-1:5   #產生1-5直接連續整數數據,數據名為x2我們也可以利用seq(1,5)產生等距的數據串,本文先前已經介紹過了。
  • R語言從入門到精通:Day8-圖形繪製|r語言|直方圖|條形圖|圖例_網易...
    在上一次教程中,我們講解了R語言繪圖的諸多函數,想必看到自己做出的圖形,肯定小有成就感吧。將整個繪圖區域理解為橫坐標為 0 到 1、縱坐標為 0 到 1 的正方形區域,上圖中散點圖的繪圖區為橫坐標 0 到 0.8、縱坐標 0 到 0.8 的區域,上方的箱線圖繪圖區域為橫坐標 0 到 0.8、縱坐標為 0.55 到 1 的區域。
  • 快速入門 | 學習 R 語言
    函數入門與 Python 類似,函數同樣是 R 語言編程的核心下面的函數統計向量中奇數的個數其中 %% 是求餘操作符(Python 中是 %)oddcount <- function(x) { k <- 0 for (n in x) { if (n %% 2 == 1) k <
  • Tidy時代R語言學習的一些ABC
    R從來都不是最熱的數據工具,就國內的情況來說,2010年時最熱的是Matlab,到了2020年最熱的成了Python。在我看來,爭論哪種語言工具是最好的對於實際工作並沒有太大的意義。選擇什麼樣的工具,要看熟練程度、工作要求、應用場景和具體問題。畢竟,做選擇是小孩子愛做的事,成年人需要多快好省地幹活。
  • RStudio|用R Markdown生成你的R語言數據分析報告
    Rstudio有三種方式可以嵌入代碼塊:●  快捷鍵Ctrl + Alt + I ●  直接在工具欄點擊Insert命令●  手動輸入```{r} 和 ```    展示一下R Markdown 中嵌入代碼塊的效果: