學習R包
準備工作
- 鏡像設置
- 安裝
install.packages("包")
Biocmanager::install("包")
用什么代碼取決于要安裝的包在什么網(wǎng)站 - 加載
library(包)
require(包)
dplyr五個基本函數(shù)
-
mutate()
新增列
mutate(test, name = Sepal.Length * Sepal.Width)
!注意:新增的列是沒有保存在原數(shù)據(jù)框里的杜耙,若想保存下來新增的列搜骡,可以給原數(shù)據(jù)框賦值,或者新賦值一個數(shù)據(jù)框
select()
按列篩選
2.1 按列號篩選select(test,1)
2.2 按列名篩選select(test, Petal.Length, Petal.Width)
?one_of
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的行
-
arrange()
按列排序
arrange(test, Sepal.Length) #按Sepal.Length 這列升序排序
arrange(test, Sepal.Length, Sepal.Width) #先按Sepal.Length升序佑女,當數(shù)值一樣時按Sepal.Width升序
arrange(test, desc(Sepal.Length)) #按Sepal.Length降序
-
summarise()
對數(shù)據(jù)進行總結
ie.summarise(test, mean(Sepal.Length), sd(Sepal.Length)) #test中Sepal.Length的平均值和方差
可以和group_by()
結合使用
summarise(group_by(test,Species), mean(Sepal.Length), sd(Sepal.Length))
將test中的數(shù)據(jù)按照Species分類记靡,然后分別計算每類Sepal.Length的平均值和方差
dplyr兩個使用技能
管道操作
%>%
ctrl + shift + M
將上一個函數(shù)的輸出作為下一個函數(shù)的輸入
test %>% # 輸出結果為test這個數(shù)據(jù)框
+ group_by(Species) %>% # 輸入test這個數(shù)據(jù)框,輸出group_by(test,Species)
+ summarise(mean(Sepal.Length), sd(Sepal.Length)) # 輸入group_by(test,Species)的結果团驱,輸出summarise(group_by(test,Species), mean(Sepal.Length), sd(Sepal.Length))
所以
test %>%
+ group_by(Species) %>%
+ summarise(mean(Sepal.Length), sd(Sepal.Length))
就等于
summarise(group_by(test,Species), mean(Sepal.Length), sd(Sepal.Length))
count統(tǒng)計某列的unique值
count(test,Species)
dplyr處理關系數(shù)據(jù)
將兩個表進行連接
新賦值兩個數(shù)據(jù)框
test1 <- data.frame(x = c('b','e','f','x'),
+ z = c("A","B","C",'D'))
test2 <- data.frame(x = c('a','b','c','d','e','f'),
+ y = c(1,2,3,4,5,6))
取交集inner_join()
inner_join(test1, test2, by = "x")
根據(jù)x列取test1和test2的交集
向左連接left_join()
> left_join(test1, test2, by = 'y')
Error in `left_join()`:
! Join columns must be present in data.
? Problem with `y`.
Run `rlang::last_error()` to see where the error occurred. # 只有兩個數(shù)據(jù)框都有同一列的時候才能連接
> left_join(test1, test2, by = 'x')
x z y
1 b A 2
2 e B 5
3 f C 6
4 x D NA # 在此顯示為NA摸吠,而在下方顯示為<NA>是因為y的類型為numeric,而z的類型為character
> left_join(test2, test1, by = 'x')
x y z
1 a 1 <NA>
2 b 2 A
3 c 3 <NA>
4 d 4 <NA>
5 e 5 B
6 f 6 C
全連接full_join()
full_join(test1,test2,by='x')
x z y
1 b A 2
2 e B 5
3 f C 6
4 x D NA
5 a <NA> 1
6 c <NA> 3
7 d <NA> 4
> full_join(test2,test1,by='x')
x y z
1 a 1 <NA>
2 b 2 A
3 c 3 <NA>
4 d 4 <NA>
5 e 5 B
6 f 6 C
7 x NA D
半連接semi_join()
semi_join(x=,y=,copy=copy)
基于第二個數(shù)據(jù)集的信息來過濾第一個數(shù)據(jù)集的數(shù)據(jù)嚎花。
semi_join(test1,test2, by = 'x')
x z
1 b A
2 e B
3 f C
> semi_join(test2,test1, by = 'x')
x y
1 b 2
2 e 5
3 f 6
反連接anti_join()
找出合并時哪些行不能匹配第二個數(shù)據(jù)集
anti_join(test2, test1, by = 'x')
x y
1 a 1
2 c 3
3 d 4
> anti_join(test1, test2, by = 'x')
x z
1 x D
簡單合并
-
bind_rows()
需要兩個數(shù)據(jù)框列數(shù)相同 -
bind_cols()
需要兩個數(shù)據(jù)框行數(shù)相同