dplyr 数据处理

dplyr 是plyr的增强版,名称中的d表名了它是一个专注于处理数据框的R包,dplyr提供了灵活的数据操作语法。其特点如下:

  1. 识别最重要的数据操作动词,并使其易于使用。
  2. 通过在C ++中编写关键部分(使用Rcpp)为内存数据提供极快的性能
  3. 使用相同的界面处理数据,无论数据存储在何处(数据框、数据表或者数据库)

注:本文所用数据来自nycflights13::flights,该数据集包含2013年从纽约市出发的所有336776个航班信息。
用dplyr 包处理数据时,要先将数据转化成tbl_df 的tibble类型的数据(flights数据集不需要转换,这里仅作演示)

# 导入包
library(nycflights13)
# 检索数据集
dim(flights)
# 转换数据
flights <- tbl_df(flights)

筛选:

filter(数据集, 条件1 & 条件2 ...)

类似于SQL的where语句,条件选择操作。filter() 和slice()函数可以按给定的逻辑条件筛选出符合要求的子数据集, 类似于 base::subset() 函数,但代码更加简洁, 同时也支持对同一对象的任意个条件组合(表示AND时要使用&或者直接使用逗号),返回与.data相同类型的对象。原数据集行名称会被过滤掉。

# 查询所有1月1号的航班
filter(flights, month == 1 & day == 1)
# 等同于下面这条语句
flights[flights$month == 1 & flights$day == 1, ]

排列:

arrange(数据集, 变量1, 变量2, 变量3 ...)

arrange()按给定的列名依次对行进行排序,类似于base::order()函数。默认是按照升序排序,对列名加 desc() 可实现倒序排序。原数据集行名称会被过滤掉。

# 按照年、月、日升序排列
arrange(flights, year, month, day)
# 航班到达延误字段用desc()按降序排列
arrange(flights, desc(arr_delay))

查询:

select(数据集, 变量1, 变量2, 变量3 ...)

select()用列名作参数来选择子数据集。dplyr包中提供了些特殊功能的函数与select函数结合使用, 用于筛选变量,包括starts_with,ends_with,contains,matches,one_of,num_range和everything等。用于重命名时,select()只保留参数中给定的列,rename()保留所有的列,只对给定的列重新命名。原数据集行名称会被过滤掉。

# 查询年、月、日字段
select(flights, year, month, day)
# 等同于下面这条语句
select(flights, year:day)
# 查询除年、月、日字段以外的所有字段
select(flights, -(year:day))

添加:

mutate(数据集, 变量1 = 条件, 变量2 = 条件 ...)

mutate()和transmute()函数对已有列进行数据运算并添加为新列,类似于base::transform() 函数, 不同的是可以在同一语句中对刚增添加的列进行操作。mutate()返回的结果集会保留原有变量,transmute()只返回扩展的新变量。原数据集行名称会被过滤掉。

# 计算航班延迟时间和速度(不保留新变量)
mutate(flights,
       gain = arr_delay - dep_delay,
       speed = distance / air_time * 60
)
# 不保留新变量,但引用新建的变量
mutate(flights,
  gain = arr_delay - dep_delay,
  speed = distance / air_time * 60
)
# 计算航班延迟时间和延迟时间占比(保留新变量)
transmute(flights,
          gain = arr_delay - dep_delay,
          gain_per_hour = gain / (air_time / 60)
)

统计:

summarise(数据集, 条件)

对数据框调用函数进行汇总操作, 返回一维的结果。返回多维结果时会报如下错误:
Error: expecting result of length one, got : 2
原数据集行名称会被过滤掉。

# 计算航班平均延迟时间
summarise(flights,
          delay = mean(dep_delay, na.rm = TRUE)
)

去重:

distinct(数据集, 去重对象)

distinct()用于对输入的tbl进行去重,返回无重复的行,类似于 base::unique() 函数,但是处理速度更快。原数据集行名称会被过滤掉。

# 对月份去重
distinct(flights, month)

抽样:

sample_n(数据集, 抽取数量 ...)

sample_frac(数据集, 抽取比例 ...)

sample_n()随机抽取指定数目的样本,sample_frac()随机抽取指定百分比的样本,默认都为不放回抽样,通过设置replacement = TRUE可改为放回抽样,可以用于实现Bootstrap抽样。
sample_n(tbl, size, replace = FALSE, weight = NULL, .env = NULL)
sample_frac(tbl, size = 1, replace = FALSE, weight = NULL, .env = NULL)

# 随机无重复的取10行数据
sample_n(flights, 10)
# 随机无重复的取10%的数据
sample_frac(flights, 0.1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容