R包--dplyr為例
安裝與加載
- 鏡像設(shè)置
Tools>Global options>Pakages>CRAN
options()$repos
檢查鏡像網(wǎng)站
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
- 安裝
install.packages(“dplyr”)
/BiocManager::install(“dplyr”)
出現(xiàn)問題:重新設(shè)置鏡像菇民;不存在叫‘pillar’這個名字的程輯包:下載pillar - 加載
library(包)
require(包)
- 示例數(shù)據(jù)
test <- iris[c(1:2,51:52,101:102),]
dplyr五個基礎(chǔ)函數(shù)
- mutate(),新增列
mutate(test, new = Sepal.Length * Sepal.Width)
- 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))
- filter(),篩選行
filter(test, Species == "setosa")
filter(test, Species == "setosa"&Sepal.Length > 5 )
filter(test, Species %in% c("setosa","versicolor"))
- arrange(),按某1列或幾列對表格排序
(1) 默認從小到大排序
arrange(test, Sepal.Length)
(2) 用desc從大到小
arrange(test, desc(Sepal.Length))
- summarise(),匯總
結(jié)合group_by更好
(1) 計算Sepal.Length的平均值和標(biāo)準差
summarise(test, mean(Sepal.Length), sd(Sepal.Length))
(2) 先按Species分組第练,再進行計算上述
group_by(test, Species)
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))
dplyr實用技能
- 管道操作 %>% (cmd/ctr + shift + M)
tidyverse包的加載
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
- count統(tǒng)計某列unique值
count(test,Species)
dplyr處理關(guān)系數(shù)據(jù)
連接兩個表玛荞,不要引入factor
options(stringsAsFactors = F)
test1 <- data.frame(x = c('b','e','f','x'), z = c("A","B","C",'D'),stringsAsFactors = F)
test2 <- data.frame(x = c('a','b','c','d','e','f'), y = c(1,2,3,4,5,6),stringsAsFactors = F)
- 內(nèi)連inner_join--取交集
inner_join(test1, test2, by = "x")
- 左連left_join
left_join(test1, test2, by = 'x')
left_join(test2, test1, by = 'x')
- 全連full_join
full_join( test1, test2, by = 'x')
- 半連接
返回與y表匹配的x表的記錄
semi_join(x = test1, y = test2, by = 'x')
- 反連接
返回?zé)o法與y表匹配的x表的記錄
anti_join(x = test2, y = test1, by = 'x')
- 簡單合并
bind_rows() --列數(shù)相同
bind_cols() --行數(shù)相同
test1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
test2 <- data.frame(x = c(5,6), y = c(50,60))
test3 <- data.frame(z = c(100,200,300,400))
bind_rows(test1, test2)
bind_cols(test1, test3)