热线电话:13121318867

登录
2018-10-28 阅读量: 876
R扩展包dplyr笔记分享(1)

初始化0.1 安装

install.packages("dplyr")

0.2 示范数据

  • library(Lahman): Lahman 包里的棒球比赛数据集 Batting
  • library(hflights): hflights 包里的飞机航班数据

0.3 数据集类型

将过长过大的数据集转换为显示更友好的 tbl_df 类型:

hflights_df <- tbl_df(hflights)

可以 hflights_df 感受一下不再被刷屏的感觉.

1 基本操作

把常用的数据操作行为归纳为以下五种:

1.1 筛选: filter()

按给定的逻辑判断筛选出符合要求的子数据集, 类似于 base::subset() 函数

例如:

filter(hflights_df, Month == 1, DayofMonth == 1)

用R自带函数实现:

hflights[hflightsMonth == 1 & hflightsMonth == 1 & hflightsDayofMonth == 1, ]

除了代码简洁外, 还支持对同一对象的任意个条件组合, 如:

filter(hflights_df, Month == 1 | Month == 2)

注意: 表示 AND 时要使用 & 而避免 &&

1.2 排列: arrange()

按给定的列名依次对行进行排序.

例如:

arrange(hflights_df, DayofMonth, Month, Year)

对列名加 desc() 进行倒序:

arrange(hflights_df, desc(ArrDelay))

这个函数和 plyr::arrange() 是一样的, 类似于 order()

用R自带函数实现:

hflights[order(hflightsDayofMonth,hflightsMonth, hflightsYear),]hflights[order(desc(hflightsArrDelay)), ]

1.3 选择: select()

用列名作参数来选择子数据集:

select(hflights_df, Year, Month, DayOfWeek)

还可以用 : 来连接列名, 没错, 就是把列名当作数字一样使用:

select(hflights_df, Year:DayOfWeek)

用 - 来排除列名:

select(hflights_df, -(Year:DayOfWeek))

同样类似于R自带的 subset() 函数 (但不用再写一长串的 c("colname1", "colname2") 或者 which(colname(data) == "colname3"), 甚至还要去查找列号)

1.4 变形: mutate()

对已有列进行数据运算并添加为新列:

mutate(hflights_df,   gain = ArrDelay - DepDelay,   speed = Distance / AirTime * 60)

作用与 plyr::mutate() 相同, 与 base::transform() 相似, 优势在于可以在同一语句中对刚增加的列进行操作:

mutate(hflights_df,   gain = ArrDelay - DepDelay,   gain_per_hour = gain / (AirTime / 60))

而同样操作用R自带函数 transform() 的话就会报错:

transform(hflights,   gain = ArrDelay - DepDelay,   gain_per_hour = gain / (AirTime / 60))1.5 汇总: summarise()

对数据框调用其它函数进行汇总操作, 返回一维的结果:

summarise(hflights_df,   delay = mean(DepDelay, na.rm = TRUE))

等同于 plyr::summarise(), 原文说该函数功能尚不是非常有用, 大概以后的更新会加强吧。

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子