
R語言數(shù)據(jù)處理包dplyr、tidyr筆記
dplyr包是Hadley Wickham的新作,主要用于數(shù)據(jù)清洗和整理,該包專注dataframe數(shù)據(jù)格式,從而大幅提高了數(shù)據(jù)處理速度,并且提供了與其它數(shù)據(jù)庫的接口;tidyr包的作者是Hadley Wickham, 該包用于“tidy”你的數(shù)據(jù),這個包常跟dplyr結合使用。
本文將介紹dplyr包的下述五個函數(shù)用法:
篩選: filter()
排列: arrange()
選擇: select()
變形: mutate()
匯總: summarise()
分組: group_by()
以及tidyr包的下述四個函數(shù)用法:
gather—寬數(shù)據(jù)轉為長數(shù)據(jù);
spread—長數(shù)據(jù)轉為寬數(shù)據(jù);
unit—多列合并為一列;
separate—將一列分離為多列;
dplyr、tidyr包安裝及載入
install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)
使用datasets包中的mtcars數(shù)據(jù)集做演示,首先將過長的數(shù)據(jù)整理成友好的tbl_df數(shù)據(jù):
mtcars_df = tbl_df(mtcars)
dplyr包基本操作
1.1 篩選: filter()
按給定的邏輯判斷篩選出符合要求的子數(shù)據(jù)集
filter(mtcars_df,mpg==21,hp==110)
# A tibble: 2 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.620 16.46 0 1 4 4
2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
1.2 排列: arrange()
按給定的列名依次對行進行排序:
arrange(mtcars_df, disp) #可對列名加 desc(disp) 進行倒序
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
2 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
3 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
5 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
6 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
8 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
9 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
10 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
# ... with 22 more rows
1.3 選擇: select()
用列名作參數(shù)來選擇子數(shù)據(jù)集:
select(mtcars_df, disp:wt)
# A tibble: 32 x 4
disp hp drat wt
* <dbl> <dbl> <dbl> <dbl>
1 160.0 110 3.90 2.620
2 160.0 110 3.90 2.875
3 108.0 93 3.85 2.320
4 258.0 110 3.08 3.215
5 360.0 175 3.15 3.440
6 225.0 105 2.76 3.460
7 360.0 245 3.21 3.570
8 146.7 62 3.69 3.190
9 140.8 95 3.92 3.150
10 167.6 123 3.92 3.440
# ... with 22 more rows
1.4 變形: mutate()
對已有列進行數(shù)據(jù)運算并添加為新列:
mutate(mtcars_df,
NO = 1:dim(mtcars_df)[1])
# A tibble: 32 x 12
mpg cyl disp hp drat wt qsec vs am gear carb NO
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 1
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 2
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 3
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 6
7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 7
8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 8
9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 9
10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 10
# ... with 22 more rows
1.5 匯總: summarise()
對數(shù)據(jù)框調用其它函數(shù)進行匯總操作, 返回一維的結果:
summarise(mtcars_df,
mdisp = mean(disp, na.rm = TRUE))
# A tibble: 1 x 1
mdisp
<dbl>
1 230.7219
1.6 分組: group_by()
當對數(shù)據(jù)集通過group_by()添加了分組信息后,mutate(),arrange() 和 summarise() 函數(shù)會自動對這些 tbl 類數(shù)據(jù)執(zhí)行分組操作。
cars <- group_by(mtcars_df, cyl)
countcars <- summarise(cars, count = n()) # count = n()用來計算次數(shù)
# A tibble: 3 x 2
cyl count
<dbl> <int>
1 4 11
2 6 7
3 8 14
tidyr包基本操作
2.1 寬轉長:gather()
使用gather()函數(shù)實現(xiàn)寬表轉長表,語法如下:
gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
data:需要被轉換的寬形表
key:將原數(shù)據(jù)框中的所有列賦給一個新變量key
value:將原數(shù)據(jù)框中的所有值賦給一個新變量value
…:可以指定哪些列聚到同一列中
na.rm:是否刪除缺失值
widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88))
widedata
person grade score
1 Alex 2 78
2 Bob 3 89
3 Cathy 4 88
longdata <- gather(widedata, variable, value,-person)
longdata
person variable value
1 Alex grade 2
2 Bob grade 3
3 Cathy grade 4
4 Alex score 78
5 Bob score 89
6 Cathy score 88
2.2 長轉寬:spread()
有時,為了滿足建模或繪圖的要求,往往需要將長形表轉換為寬形表,或將寬形表變?yōu)殚L形表。如何實現(xiàn)這兩種數(shù)據(jù)表類型的轉換。使用spread()函數(shù)實現(xiàn)長表轉寬表,語法如下:
spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:為需要轉換的長形表
key:需要將變量值拓展為字段的變量
value:需要分散的值
fill:對于缺失值,可將fill的值賦值給被轉型后的缺失值
mtcarsSpread <- mtcarsNew %>% spread(attribute, value)
head(mtcarsSpread)
car am carb cyl disp drat gear hp mpg qsec vs wt
1 AMC Javelin 0 2 8 304 3.15 3 150 15.2 17.30 0 3.435
2 Cadillac Fleetwood 0 4 8 472 2.93 3 205 10.4 17.98 0 5.250
3 Camaro Z28 0 4 8 350 3.73 3 245 13.3 15.41 0 3.840
4 Chrysler Imperial 0 4 8 440 3.23 3 230 14.7 17.42 0 5.345
5 Datsun 710 1 1 4 108 3.85 4 93 22.8 18.61 1 2.320
6 Dodge Challenger 0 2 8 318 2.76 3 150 15.5 16.87 0 3.520
2.3 合并:unit()
unite的調用格式如下:
unite(data, col, …, sep = “_”, remove = TRUE)
data:為數(shù)據(jù)框
col:被組合的新列名稱
…:指定哪些列需要被組合
sep:組合列之間的連接符,默認為下劃線
remove:是否刪除被組合的列
wideunite<-unite(widedata, information, person, grade, score, sep= "-")
wideunite
information
1 Alex-2-78
2 Bob-3-89
3 Cathy-4-88
2.4 拆分:separate()
separate()函數(shù)可將一列拆分為多列,一般可用于日志數(shù)據(jù)或日期時間型數(shù)據(jù)的拆分,語法如下:
separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
data:為數(shù)據(jù)框
col:需要被拆分的列
into:新建的列名,為字符串向量
sep:被拆分列的分隔符
remove:是否刪除被分割的列
widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")
widesep
person grade score
1 Alex 2 78
2 Bob 3 89
3 Cathy 4 88
可見separate()函數(shù)和unite()函數(shù)的功能相反。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關鍵? 在循環(huán)神經網絡(RNN)家族中,長短期記憶網絡(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務的價值轉化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預測分析中的應用:從數(shù)據(jù)查詢到趨勢預判? ? 在數(shù)據(jù)驅動決策的時代,預測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內權威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應對策略? 長短期記憶網絡(LSTM)作為循環(huán)神經網絡(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調研數(shù)據(jù)中的深度應用? 市場調研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉日期:解鎖數(shù)據(jù)處理的關鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎 ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03