初始化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(), 原文说该函数功能尚不是非常有用, 大概以后的更新会加强吧。
暂无数据