《實習日記》| 7月20日 R語言筆記——dplyr

2021-03-02 想成為大佬的生物狗
7月20日R語言筆記——dplyr

7月20日R語言筆記——dplyr五個基礎函數1.mutate(),新增列2.select(),按列篩選兩個實用技能1:管道操作 %>% (cmd/ctr + shift + M),傳遞作用2:count統計某列的unique值,管道操作CTRL + SHIFT + M3. merge()只可以取交集1.內連inner_join,取交集2.左連left_join,以在前面的數據集為準3.全連full_join4.半連接:返回能夠與y表匹配的x表所有記錄semi_join,返回所有與test2匹配的test15.反連接:返回無法與y表匹配的x表的所記錄anti_join6.數據的簡單合併練習6-11.將iris數據框的前4列gather,然後還原2.將第三列分成兩列(以小數點為分隔符)然後合併3.加載test1.Rdata,將deg數據框按照pvalue從小到大排序4. 將兩個數據框按照probe_id列連接在一起

rm(list = ls())

if(!require(dplyr))install.packages("dplyr")

library(dplyr)

test <- iris[c(1:2,51:52,101:102),]

rownames(test) =NULL

五個基礎函數1.mutate(),新增列
mutate(test, new = Sepal.Length * Sepal.Width)#此處不需要『』和$

2.select(),按列篩選

(1)按列號篩選

select(test,1)

select(test,c(1,5))

select(test,Sepal.Length)

(2)按列名篩選

select(test, Petal.Length, Petal.Width)

vars <- c("Petal.Length", "Petal.Width")

select(test, one_of(vars))#將所有要提取列的列名設置為一個向量,但是要用one_of()

一組來自tidyselect的有用函數

select(test, starts_with("Petal"))

select(test, ends_with("Width"))

select(test, contains("etal"))

select(test, matches(".t."))#.指任意字符

select(test, everything())

select(test, last_col())

select(test, last_col(offset = 2))#距離最後一列距離為2的列

(4)利用everything(),列名可以重排序

test

select(test,Species,everything())#將調整為第一列

3.filter()篩選行

filter(test, Species == "setosa")

filter(test, Species == "setosa"&Sepal.Length > 5 )

filter(test, Species %in% c("setosa","versicolor"))

4.arrange(),按某一列對整個表格進行排序

arrange(test, Sepal.Length)#默認從小到大排序

arrange(test, desc(Sepal.Length))#用desc從大到小

arrange(test, Sepal.Length, desc(Sepal.Width))#根據兩列排序,先排第一列Sepal.Length,再按照降序排Sepal.Width

5.summarise():匯總

對數據進行匯總操作,結合group_by使用實用性強

summarise(test, mean(Sepal.Length), sd(Sepal.Length))# 計算Sepal.Length的平均值和標準差:

先按照Species分組,計算每組Sepal.Length的平均值和標準差

group_by(test, Species)

summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))

兩個實用技能1:管道操作 %>% (cmd/ctr + shift + M),傳遞作用
library(dplyr)

a=iris

x1 = filter(iris,Sepal.Width>3)

x2 = select(x1,c("Sepal.Length","Sepal.Width" ))

x3 = arrange(x2,Sepal.Length)#按照Sepal.Length列,默認從小到大排序

rm(list = ls())

colnames(iris)

iris %>%

filter(Sepal.Width>3) %>%

select(c("Sepal.Length","Sepal.Width" ))%>%

arrange(Sepal.Length)

2:count統計某列的unique值,管道操作CTRL + SHIFT + M

count(test,Species)

count(test,test$Sepal.Length)

處理關係數據:即將2個表進行連接,注意:不要引入factor

3. merge()只可以取交集
rm(list = ls())

options(stringsAsFactors = F)

test1 <- data.frame(name = c('jimmy','nicker','doodle'),
                  blood_type = c("A","B","O"))
test1
test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                  group = c("group1","group1","group2","group2"),
                  vision = c(4.2,4.3,4.9,4.5))
test2

test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                  weight = c(140,145,110,138))
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")#列名不一樣,但是列的內容一樣


1.內連inner_join,取交集
inner_join(test1, test2, by = "name")
inner_join(test1,test3,by = c("name"="NAME"))#列名不一樣,但是列的內容一樣

2.左連left_join,以在前面的數據集為準
test1
test2
left_join(test1, test2, by = 'name')
left_join(test2, test1, by = 'name')

3.全連full_join
full_join( test1, test2, by = 'name')

4.半連接:返回能夠與y表匹配的x表所有記錄semi_join,返回所有與test2匹配的test1
semi_join(x = test1, y = test2, by = 'name')
semi_join(x = test2, y = test1, by = 'name')
test1
test2

5.反連接:返回無法與y表匹配的x表的所記錄anti_join
anti_join(x = test2, y = test1, by = 'name')

6.數據的簡單合併

在相當於base包裡的cbind()函數和rbind()函數;注意,bind_rows()函數需要兩個表格列數相同,而bind_cols()函數則需要兩個數據框有相同的行數

test1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
test1
test2 <- data.frame(x = c(5,6), y = c(50,60))
test2
test3 <- data.frame(z = c(100,200,300,400))
test3
bind_rows(test1, test2)
bind_cols(test1, test3)



練習6-11.將iris數據框的前4列gather,然後還原
rm(list = ls())
options(stringsAsFactors = F)
library('tidyr')
head(iris)
data = iris[,1:4]
colnames(data)
gather_data =gather(data,key = var,value = exp)
data2 = spread(gather_data,key = var,value = exp)
data3=gather_data %>%
group_by(var) %>%
mutate(id=1:n()) %>%
spread(var,exp)

2.將第三列分成兩列(以小數點為分隔符)然後合併
x=separate(iris,Sepal.Width,into = c('a','b'),sep = "[.]")
x#因為數值型的數據,所以劃分之後會有0存在即NA,因此可以將NA替換
#x$b=replace_na(x$b,0);x
x_re=unite(x,"Sepal.Width",a,b,sep = ".")
x_re
str(x_re)
#看起來代碼沒什麼不妥,但是仔細一看會發現其實有個坑,原始數據的第二行第二列是3.0,分割後0變成了NA,合併回來也是不對的。

#這個需求其實並不常見,只是為了作為一個例子,但這裡還是說一下解決方案:

x=separate(iris,Sepal.Width,into = c('a','b'),sep = "[.]") %>%
tidyr::replace_na(list(b=0))
x
x_re=unite(x,"Sepal.Width",a,b,sep = ".")
x_re$Sepal.Width = as.numeric(x_re$Sepal.Width)#轉換為數值型,NA變為0
x_re
str(x_re)

3.加載test1.Rdata,將deg數據框按照pvalue從小到大排序
rm(list = ls())
options(stringsAsFactors = F)
test1= load('test1.Rdata')
str(test1)
head(deg)
head(ids)
str(deg)
deg = arrange(deg,P.Value)
deg = arrange(deg,desc(P.Value))

4. 將兩個數據框按照probe_id列連接在一起
p = inner_join(deg,ids,by="probe_id")

相關焦點

  • R語言筆記-dplyr-2-表操作
    表操作基礎多表操作列操作基本操作多種函數功能當前列行操作構造數據集行匯總統計分組操作添加分組刪除分組變量動詞前文:R語言筆記],b=1:20)df2 <- tibble(a=letters,b=1:26)df1 %>% semi_join(df2)df2 %>% anti_join(df1)intersect(x,y)返回x,y交集
  • 【R學習筆記】- 數據整形 - dplyr and tidyr
    library(dplyr)testdata <-  data.frame(ill=c(0,1,2,3),family=c(112,20,11,7))testdata <- mutate(testdata, ill_number = ill*family)p <- sum(testdata$ill_number)/(sum(testdata
  • R語言 | 數據操作dplyr包
    [更新~] Python網絡爬蟲與文本數據分析公眾號只帶著Python字眼,卻分享著R語言,不務正業,任性了~dplyr簡介dplyr是R語言的數據分析包,很像python中的pandas,能對dataframe
  • 《實習日記》| ​7月21日 R語言學習筆記——tidyr
    7月21日R語言學習筆記——tidyr7月21日R語言學習筆記——tidyr一、數據清理扁變長長變扁二、分割和合併原始數據分割合併三
  • R語言點滴:dplyr函數與查重案例(1)
    微信公眾號:醫意貫之如有問題或建議,請公眾號留言;如果你覺得該文章對你有幫助,歡迎讚賞R語言點滴
  • R語言基於dplyr實現數據快捷操作
    R語言在處理大數據方面一直是被人詬病的地方,那麼有人就為R語言打造了一個dplyr包可以實現高效的數據預處理,減少內存的消耗,提升處理效率
  • dplyr和tidyr簡介|數據處理
    數據處理兩大利器:dplyr和tidyr1 dplyr 簡介dplyr是Hadley Wickham
  • R語言dplyr包學習筆記(吐血整理宇宙無敵詳細版) - CDA數據分析師
    歡迎交流#包安裝與加載install.packages("dplyr")library(dplyr)#調用mtcars數據&數據集介紹data(mtcars)160.0 110 3.90 2.875 17.02 0 1 4 4 13 133 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 6 64 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 16 185 18.7
  • 「R」dplyr 行式計算
    「原文來自:dplyr 文檔」上一篇:「R」dplyr 列式計算通常 dplyr 和 R 更適合對列進行操作,而對行操作則顯得更麻煩。按行匯總統計dplyr::summarise() 讓一列多行的統計匯總變得非常簡單,當它與 rowwise() 結合時,它也可以簡便地操作匯總一行多列。
  • 【數據管理】Tidyverse:R 語言學習之旅的新起點
    作為起點的路徑則是近年新興的學習模式(tidyverse first),理念是在一開始先不談[] 、[[]] 、$ 流程控制與循環等內容,而從dplyr 的函數應用開頭,目的是在最短時間讓初學者切入數據處理與視覺化的應用,讓R 語言能夠很快地在課業、研究或者工作派上用場。
  • Datacamp學習筆記(1)——R語言中的Tidyverse
    Datacamp是一個很棒的學習程式語言的網站!在這個網站中,可以學習R,Python等很火併且對於心理學專業很實用的編程技能!
  • 【好書共享】《R for Data Science》的中譯版
    這本書原版就是開源的(網址:http://r4ds.had.co.nz/),但是中文看得更快,學R語言一定要買一本紙質書放在案頭,多多翻閱。R for Data Science關於這本書這本書將教我們如何用R來做數據科學:學習如何將自己的數據導入R中,把它變成最有用的結構,轉換,可視化並對數據進行建模。
  • 強大的數據清理大師:dplyr
    。:7.900 Max. :4.400 Max. :6.900 Max.dplyr另外一個函數為:%>%,也稱為dplyr的管道系統,可以簡化代碼的複雜程度,更適合人們的閱讀習慣。
  • 從另一個視角看 R 語言的方言 Tidyverse
    這本書特別強調 「遵循 Tidyverse」[7]。書共231頁,僅簡略地提到向量,並且完全沒有提及下標。案例分析:Dalgaard 的書2019年12月,一位研究者發推特說 Peter Dalgaard 的一本講統計學概論的書「過時了」,因為用的是 base-R 而非 Tidy。想一想如果要更新到 Tidy 會涉及什麼,又會強加給學生多少複雜性。
  • 『R腳本練習』dplyr各種join
    回到shell,我當時發現shell命令的強大之後(用awk寫了第一個條件篩選的命令)想怎麼可以用shell命令實現vlookup, 最終有了這篇awk實現excel vlookup,但是隨著時間的推移,敲了越來越多的R和python代碼,發現vlookup確實有一定的局限,而且當時寫的shell腳本也存在一定的問題,操作也比較麻煩,數據處理,還是dplyr和pandas比較強大,這裡放一個新鮮的dplyr
  • R包之dplyr--處理表格數據的好幫手
    在R語言做生信分析的過程中,前期有相當一部分工作都是在處理各種表格--刪除某列、改列名、加某一列、根據條件篩選某些列 -- 幾乎左右的生信分析項目都離不開數據框的處理
  • 地理數據科學培訓班第一課之初識R語言
    直播信息:直播時間:2020 年 7 月 11 日晚上 9 點;地理數據科學培訓班開班啦R 和 RStudio 的安裝是非常簡單的,這裡提供一些安裝 Tips。在文章的最後我還通過一個案例帶大家走進奇幻的 R 世界。
  • R語言學習指南(3) tidyverse的基礎使用
    tidyverse是為數據科學設計的R軟體包,它包含(ggplot2、dplyr、tidyr、stringr、magrittr、tibble)等一系列熱門軟體包,學好tidyverse的使用可也讓你站上另一個高度,從而高效的處理數據,因此本文檔不僅僅做一些案例介紹,而是希望以較為正確的學習方法來介紹R語言,使大家少走彎路,快速入門掌握R語言
  • 寫給零基礎同學的R語言第四篇教程-神奇R包dplyr
    首先還是要下載:install.packages("dplyr")加載:library(dplyr)下面要用到tidyr,所以也加載一下library(tidyr) 一、測試數據1.新建數據框frame1<-data.frame
  • 對照著Excel入門R語言表格數據處理
    這裡主要推薦使用dplyr包對數據進行分類匯總,主要用到以下幾個函數:filter():按記錄數值篩選,針對表格的「