學(xué)習(xí)R包學(xué)習(xí)筆記:
思維導(dǎo)圖:
問題總結(jié):
- 安裝包和在哪個(gè)project下無關(guān)。
- 要使用dplyr包里的函數(shù)院崇,就需要先library這個(gè)包(就是說,dplyr這個(gè)R包安裝好了后尤蛮,每次運(yùn)用的時(shí)候都需要加載呐馆,那么后面運(yùn)行的函數(shù)才會包含“dplyr包”來運(yùn)行)。
- 如果library報(bào)錯(cuò)丛版,就重新安裝巩掺。
- 學(xué)習(xí)R語言-dplyr; R--dplyr包介紹學(xué)習(xí);group by詳解页畦;R語言中管道操作 %>%, %T>%, %$% 和 %%胖替;R語言環(huán)境變量的設(shè)置:options();R語言數(shù)據(jù)框中的stringsAsFactors參數(shù);CAT_6430筆記;R語言data.frame基本操作
尚待學(xué)習(xí):
(1)如果要對每一行進(jìn)行均值計(jì)算,怎么搞豫缨?
(2)semi_join独令;
(3)anti_join。
課程內(nèi)容:學(xué)習(xí)R包
【以dplyr為例】
1. 安裝和加載R包
1.1 鏡像設(shè)置
根據(jù)你還在每次配置Rstudio的下載鏡像嗎好芭?燃箭,但這個(gè)方法并不適用于每個(gè)電腦,有一部分會失敗舍败。隨緣招狸,失敗的話就每次需要下載R包時(shí)運(yùn)行這兩句代碼即可。
1.2 安裝
聯(lián)網(wǎng)
R包安裝命令是install.packages(“包”)
或者BiocManager::install(“包”)
邻薯。取決于你要安裝的包存在于CRAN網(wǎng)站還是Biocductor裙戏,存在于哪里?可以谷歌搜到厕诡。
1.3 加載
下面兩個(gè)命令均可累榜。
library(包)
require(包)
2. 安裝加載三部曲
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #鏡像設(shè)置
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #鏡像設(shè)置
install.packages("dplyr") #安裝
library(dplyr) #加載
3. dplyr五個(gè)基礎(chǔ)函數(shù)
3.1 賦值:<-
以示例數(shù)據(jù)為例,示例數(shù)據(jù)直接使用內(nèi)置數(shù)據(jù)集iris的簡化版:
- 復(fù)習(xí)一下Day5 內(nèi)容:
提取元素部分內(nèi)容:
X[c(a,b)] #提取第a列和第b列
灵嫌,X[a:b] #提取第a列到第b列
test <- iris[c(1:2,51:52,101:102),]
- 查看幫助:
?iris
3.2 新增列:mutate()
mutate(test, new = Sepal.Length * Sepal.Width)
說明:新增列名new, 值=第一列乘以第二列
3.3 按列篩選:select()
3.3.1 按列號篩選
eg. (1)選擇test的第1列壹罚;(2)第1,5列;
select(test,1) #選擇test的第1列
select(test,c(1,5)) #選擇test的第1,5列
3.3.2 按列名篩選
eg. (1)選擇test的“Sepal.Length”這一列寿羞;(2)選擇test的“Sepal.Length猖凛、Petal.Width”這兩列;(3)
select(test,Sepal.Length) #選擇test的“Sepal.Length”這一列稠曼。
select(test, Petal.Length, Petal.Width) #選擇test的“Sepal.Length形病、Petal.Width”這兩列客年。
vars <- c("Petal.Length", "Petal.Width") #設(shè)置vars為Petal.Length, Petal.Width字符串向量;
select(test, one_of(vars)) #
r語言中one_of()函數(shù)的作用:one_of()是用來聲明選擇對象的漠吻。比如one_of("x","y")就是表明選擇x,y變量量瓜。
3.4 篩選行:filter()
filter(test, Species == "setosa") #篩選species這一列,值為setosa的行途乃。
filter(test, Species == "setosa"&Sepal.Length > 5 ) #雙重篩選:篩選species這一列值為setosa且Sepal.Length這一列值大于5的行绍傲。
filter(test, Species %in% c("setosa","versicolor")) #篩選Species這一列,值為setosa和versicolor的行耍共。
復(fù)習(xí)Day5內(nèi)容:
(1) 雙等號“==”表示等于烫饼,單等號“=”為賦值;
(2) %in%x:【例如:[x %in% c(1,2,5)]#存在于向量c(1试读,2杠纵,5)中的元素】
3.5 按某1列或某幾列對整個(gè)表格進(jìn)行排序:arrange()
arrange(test, Sepal.Length) #對test中的Sepal.Length這一列進(jìn)行排序(默認(rèn)從小到大排序)
arrange(test, desc(Sepal.Length))#用desc從大到小
3.6 匯總:summarise()
對數(shù)據(jù)進(jìn)行匯總操作,結(jié)合group_by使用實(shí)用性強(qiáng)。
group_by的意思是根據(jù)by對數(shù)據(jù)按照哪個(gè)字段進(jìn)行分組钩骇,或者是哪幾個(gè)字段進(jìn)行分組比藻。來源:group by詳解
summarise(test, mean(Sepal.Length), sd(Sepal.Length)) #對數(shù)據(jù)進(jìn)行簡單的統(tǒng)計(jì)匯總,計(jì)算Sepal.Length的平均值和標(biāo)準(zhǔn)差
group_by(test, Species)
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length)) # 先對test按Species分組倘屹,分組后分別計(jì)算每組Sepal.Length的平均值和標(biāo)準(zhǔn)差
4. dplyr兩個(gè)實(shí)用技能
4.1 管道操作 %>% (快捷鍵:cmd/ctr + shift + M)
(加載任意一個(gè)tidyverse包即可用管道符號)
我們對同一個(gè)數(shù)據(jù)塊的要進(jìn)行次行的處理银亲,一條語句是很難完成的,
%>%傳遞到函數(shù):把一個(gè)數(shù)據(jù)集傳給一個(gè)匿名函數(shù)纽匙,進(jìn)行復(fù)雜的數(shù)據(jù)的操作务蝠。在這里,我們會顯示的定義數(shù)據(jù)集的名字作為匿名函數(shù)的參數(shù)烛缔。
test %>% #將test數(shù)據(jù)集傳給下一個(gè)函數(shù)馏段;
group_by(Species) %>% #對test按Species分組,再將此數(shù)據(jù)集傳給下一個(gè)函數(shù)力穗;
summarise(mean(Sepal.Length), sd(Sepal.Length)) #分別計(jì)算上個(gè)數(shù)據(jù)集的每組Sepal.Length的平均值和標(biāo)準(zhǔn)差
4.2 count統(tǒng)計(jì)某列的unique值
count(test,Species) #count 用于計(jì)算某一列的唯一的值毅弧。
5.dplyr處理關(guān)系數(shù)據(jù)
即將2個(gè)表進(jìn)行連接,注意:不要引入factor
options(stringsAsFactors = F)
test1 <- data.frame(x = c('b','e','f','x'), # 新建數(shù)據(jù)框test1当窗,test2,注意數(shù)據(jù)框中不能有factor寸宵。
z = c("A","B","C",'D'),
stringsAsFactors = F)
test1
test2 <- data.frame(x = c('a','b','c','d','e','f'),
y = c(1,2,3,4,5,6),
stringsAsFactors = F)
test2
5.1 取交集:內(nèi)連inner_join
inner_join(test1, test2, by = "x") #取數(shù)據(jù)框test1 and test2中崖面,x列相同的行和列。
5.2 左連left_join
left_join(test1, test2, by = 'x')
#以test1的x列為參照梯影,合并兩個(gè)表格巫员,注意,這里x是兩個(gè)數(shù)據(jù)框都有的甲棍。
#并且以test1的x列全部列出简识,不管test2的x比test1多還是少,均以test1為主。
left_join(test2, test1, by = 'x')
5.3 全連full_join
full_join(test1,test2,by='x') #兩個(gè)數(shù)據(jù)框按共有的x列七扰,全部合并奢赂,注意,這里by=也只能選兩個(gè)數(shù)據(jù)框都有的列名颈走。
5.4 半連接:返回能夠與y表匹配的x表所有記錄:semi_join
semi_join(x = test1, y = test2, by = 'x') #這里我也沒弄懂膳灶。
5.5 反連接:返回?zé)o法與y表匹配的x表的所記錄anti_join
anti_join(x = test2, y = test1, by = 'x') #這里依舊沒弄懂。
5.6 簡單合并
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_rows()函數(shù)需要兩個(gè)數(shù)據(jù)框列數(shù)相同轧钓;
bind_cols(test1, test3) #注意,bind_cols()函數(shù)需要兩個(gè)數(shù)據(jù)框行數(shù)相同锐膜;
感謝老師指導(dǎo)????????????????