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阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容