導入所需包
install.packages("nycflights13")
library(nycflights13)
library(tidyverse)
打開文件
getwd() ##查看默認存儲路徑,再將csv文檔存入文件夾打開
library(readxl)
read.csv("hw1_a")
View(hw1_a) #查看整個數據集
str(hw1_a) #查看數據框各個變量的類型
summary(hw1_a) #查看變量的最大值、最小值、四分位數、數值型變量的均值
library(psych)
describe(hw1_a) #計算非缺失值的數量、平均數、標準差、中位數、最小值、最大值等
查看數據
?flights #查看flights包的介紹
view(flights) #查看整個數據集
&與 |或 !非
%/%(整數除法) %%(求余)
* 列名下方有縮寫可以查看數據的類型:
int 整數型變量
dbl 雙精度浮點數型變量(實數)
chr 字符向量
dttm 日期+時間型變量
lgl 邏輯性變量(僅包括TRUE和FALSE的變量)
fctr 因子(具有固定數目的值的分類變量)
date 日期型變量
五大核心dplyr函數的工作方式都是相同的,第一個參數是一個數據框;
隨后的參數使用變量名稱(不帶引號)描述了在數據框上進行的操作;輸出結果是一個新數據框。
filter( ) 按值篩選觀測
arrange( ) 對行進行重新排序
select( ) 按名稱選取變量
mutate( ) 使用現有變量的函數創建新變量
summarize( ) 將多個值總結為一個摘要統計量
①filter( )函數,按值篩選觀測:
filter(flights, month == 1, day == 1) #篩選出1月1日的所有航班
x %in% y #選取出x是y中的一個值時的所有行
m<-filter(flights,month==11|month==12) #找出11月或 12 月出發的所有航班
等同于
m<-filter(flights,month%in%c(11,12))
②arrange( )函數,改變行的順序,按升序排列。接受數據框和列名作為參數,如果列名不只一個,那么就使用后面的列在前面排序的基礎上繼續排序:
arrange(flights,year,month,day) #按年月日排列
desc( ) #函數,降序排列
arrange(flights,desc(arr_delay))
③select( )函數,按名稱選取變量:
select(flights,year,month,day) #按名稱選擇列
select(flights,year:day) #選擇"year"和"day"之間的所有列
select(flights,-(year:day) #選擇除開year和day之間的所有列
還可以在select ()函數中使用一些輔助函數
starts_with("abc") #匹配以“abc”開頭的名稱
ends_with("xyz") #匹配以“xyz”結尾的名稱
contains("ijk") #匹配包含“ijk”的名稱
matches("(.)\\1") #選擇匹配正則表達式的那些變量,正則表達式會匹配名稱有重復字符的變量。
num_range("x", 1:3) #匹配x1、x2 和 x3
④mutate( )函數,使用現有變量的函數創建新變量:
(新列是現有列的函數,mutate將新列添加在數據集的最后)
mutate(flights_1,
gain=arr_delay-dep_delay,
speed=distance/air_time*60) #在flights表格中增加gain和speed兩項
- transmute( )函數,只想保留創建的新列
僅保留創建的gain,hours,gain_per_hour三列
transmute(flights_1,
gain=arr_delay-dep_delay,
hours=air_time/60,
gain_per_hour=gain/hours)
航班數據中,可以根據dep_time計算出hour和minute
transmute(flights,dep_time,
hour=dep_time%/%100,
minute=dep_time%%100)
⑤summarize( )函數:將多個值總結為一個摘要統計量,可將數據框折疊成一行。
# 每日平均延誤時間
by_day<-group_by(flights,year,month,day)
summarize(by_day,delay=mean(dep_delay,na.rm=TRUE))
⑥rename( )函數,重命名
rename(flights,year1=year) #將flights表格中的year重命名為year1
⑦缺失值NA
- 確定一個值是否為缺失值## is.na( )函數
- na.rm參數在計算前除去缺失值na.rm=TRUE
- is.na( )函數統計數據中的缺失值,缺失值會顯示為TRUE
- na.omit( )去掉缺失值所在行
- sum( !is_na( ) )非缺失值的計數
⑧輔助函數
- group_by( ) 將分析單位從整個數據集更改為單個分組
- seq( ) 它可以生成規則的數值序列
- start_with("abc") 匹配以abc開頭的名稱
- ends_with("abc") 匹配以abc結尾的名稱
- contains("abc") 匹配包含abc的名稱
- matches("(.)\1") 匹配正則表達式的變量
- num_range("x",1:3) 匹配x1,x2和x3
# 表格以delay結尾
flights_1<-select(flights,
year:day,
ends_with("delay"),distance,air_time)
- min_rank( ) 排秩函數,第一名、第二名...第五名
- desc(x) 逆序排名次,第五名、第四名....第一名
y <- c(1, 2, 2, NA, 3, 4)
min_rank(y)
## [1] 1 2 2 NA 4 5
min_rank(desc(y))
## [1] 5 3 3 NA 2 1
- lead( )函數,返回序列的領先值
- lag( )函數,返回序列的滯后值
x<-1:10
lead(x)
lag(x)
? cumsum( ) 累加和
? cumprod( ) 累加積
? cummin( ) 累加最小值
? cummax( ) 累加最大值
? cummean( ) 累加均值
⑨%>% 管道,閱讀代碼時讀作“然后”
- x %>% f(y) 轉換為f(x,y)
- x %>% f(y) %>% g(z) 轉換成g(f(x,y),z)
# 例 :假設我們想要研究每個目的地的距離和平均延誤時間之間的關系。
by_dest <- group_by(flights, dest)
delay <- summarize(by_dest,
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
)
delay <- filter(delay, count > 20, dest != "HNL")
##也可以寫成:
delays <- flights %>%
group_by(dest) %>%
summarize(
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
) %>%
filter(count > 20, dest != "HNL")