R語言dplyr

導入所需包
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")






最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容