一、dplyr是什麼
dplyr是一個R語言的包,用於數據的操作和轉換。它的核心理念是提供一組功能豐富、靈活且易於理解的函數,使得基本的數據操作可以得到簡單、快速的實現。相比於其他的數據操作工具,dplyr更加註重數據規整化、簡要和清晰化的語法,使得用戶可以更加方便地進行數據操作。
library(dplyr)
data(mtcars)
head(mtcars)
通過載入dplyr包和調用數據集,我們可以直接使用dplyr的函數進行數據操作。其中head()函數是R語言默認包中提供的函數,用於顯示數據集的前幾行。這裡我們使用head()函數展示了mtcars數據集的前6行:
mpg cyl disp hp drat wt qsec vs am gear carb
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
二、dplyr的核心功能
1、選擇列
dplyr主要的數據操作任務是從數據集中選擇、篩選想要的變數。選擇所需列的最簡單的方法是使用函數select()。select()函數允許你按照列名或條件進行選取。
select(mtcars, mpg, cyl, carb)
這裡我們使用select()函數選取了mtcars數據集中的三列,結果如下:
mpg cyl carb
Mazda RX4 21.0 6 4
Mazda RX4 Wag 21.0 6 4
Datsun 710 22.8 4 1
Hornet 4 Drive 21.4 6 1
Hornet Sportabout 18.7 8 2
Valiant 18.1 6 1
...
2、篩選數據
dplyr提供了filter()函數,可以根據一定條件篩選數據。這裡我們利用filter()函數把所有的mpg值大於20的行找出來:
filter(mtcars, mpg > 20)
得到的結果如下:
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
...
3、排序數據
dplyr提供了arrange()函數,可以根據一定條件對數據進行排序。這裡我們使用arrange()函數將mtcars數據集按照mpg、cyl和hp列排序:
arrange(mtcars, mpg, cyl, hp)
結果如下:
mpg cyl disp hp drat wt qsec vs am gear carb
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
...
4、匯總數據
dplyr提供了summarise()函數,可以對數據進行匯總,如計算均值、方差等統計量。例如,我們可以使用summarise()函數計算mtcars數據集中mpg、cyl、disp和hp的均值:
summarise(mtcars, mean(mpg), mean(cyl), mean(disp), mean(hp))
結果如下:
mean(mpg) mean(cyl) mean(disp) mean(hp)
1 20.09062 6.1875 230.7219 146.6875
三、dplyr的進階應用
1、分組數據
dplyr提供了group_by()函數,可以對數據進行按照某些列進行分組,以便進行後續的操作。例如,在mtcars數據集中,我們將數據按照gear(檔位)進行分組:
mtcars %>% group_by(gear) %>% summarise(mean(mpg), mean(cyl))
結果如下:
gear mean(mpg) mean(cyl)
1 3 16.10667 7.466667
2 4 24.53333 4.666667
3 5 21.38000 6.000000
2、使用mutate()創建新列
我們可以使用mutate()函數進行新列的計算和添加。比如,在mtcars數據集中,我們可以計算每輛車的每一升油的行駛里程:
mtcars %>% mutate(mileage = mpg / (disp / 61.0237))
這將在mtcars數據集中添加一個名為「mileage」的新列,計算了每升油的里程數。結果如下:
mpg cyl disp hp drat wt qsec vs am gear carb mileage
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 18.24803
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 18.24803
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 22.60185
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 47.53659
...
3、使用group_by()和mutate()進行分組應用
下面我們將使用group_by()和mutate()對數據進行分組。我們從midwest數據集中選取了5個變數,並計算各個州的人均收入、人均醫療支出和人口密度:
library(dplyr)
data(midwest)
midwest %>%
select(state, county, percprof, percblue, percbelowpoverty) %>%
group_by(state) %>%
mutate(avg_income = mean(percprof),
avg_medical = mean(percblue),
population_density = mean(percbelowpoverty)) %>%
select(state, avg_income, avg_medical, population_density)
結果如下:
state avg_income avg_medical population_density
1 IL 5.945945 31.756757 19.800
2 IL 5.945945 31.756757 19.800
3 IL 5.945945 31.756757 19.800
4 IL 5.945945 31.756757 19.800
...
4、使用summarize()和group_by()計算匯總統計數據
最後我們將使用summarize()和group_by()計算匯總統計數據。在diamonds數據集中,我們根據不同的顏色和切割進行分組並計算平均價格和克拉數:
library(ggplot2)
data(diamonds)
diamonds %>%
group_by(color, cut) %>%
summarize(avg_price = mean(price), avg_carat = mean(carat)) %>%
ggplot(aes(x = avg_price, y = avg_carat, color = cut, shape = color)) +
geom_point(size = 3) +
labs(title = "Average Price and Carat of Diamonds Grouped by Cut and Color",
x = "Average Price", y = "Average Carat")
結果如下:
color cut avg_price avg_carat
1 D Fair 4291.061 1.046137
2 D Good 3405.382 0.849185
3 D Very Good 3470.467 0.806381
4 D Premium 3631.292 0.721547
...
結論
本文介紹了dplyr包的基本內容和進階應用,通過上述例子可以發現,dplyr的數據操作非常靈活,簡明易懂,並且幾乎覆蓋了所有的數據篩選、分組和匯總操作。因此,無論你是初學者還是有經驗的R語言用戶,dplyr都是一個十分優秀的數據操作工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199216.html