使用dplyr进行数据转换

library(nycflights13)
library(tidyverse)

dplyr最常用的5个函数:
• 按值筛选观测(filter())。
• 对行进行重新排序(arrange())。
• 按名称选取变量(select())。
• 使用现有变量的函数创建新变量(mutate())。
• 将多个值总结为一个摘要统计量(summarize())。
函数的使用方法:
(1) 第一个参数是一个数据框。
(2) 随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作。
(3) 输出结果是一个新数据框。

filter

1.使用filter()筛选行

filter(flights, month == 1, day == 1)

2.其他比较运算符、>=、<、<=、!=(不等于)和 ==(等于)
3.布尔运算符:& 表示“与”、| 表示 “或”、! 表示“非”
找出 11 月或 12 月出发的所有航班

filter(flights, month == 11 | month == 12)
 filter(flights, month %in% c(11, 12))

如果想要找出延误时间(到达或出发)不多于2小时的航班, 那么使用以下两种筛选方式均可:

     filter(flights, !(arr_delay > 120 | dep_delay > 120))
     filter(flights, arr_delay <= 120, dep_delay <= 120)

arrange

1.使用arrange()排列行,接受一个数据框和一组作为排序依据的列名(或者更复杂的表达式)作为参数。 如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序

arrange(flights, year, month, day)

使用 desc() 可以按列进行降序排序:

arrange(flights, desc(arr_delay))

select

1.使用select()选择列

# 按名称选择列
select(flights, year, month, day)
# 选择“year”和“day”之间的所有列(包括“year”和“day”) 
select(flights, year:day)
# 选择不在“year”和“day”之间的所有列(不包括“year”和“day”) 
select(flights, -(year:day))

mutate

使用mutate()添加新变量

flights_sml <- select(flights,
       year:day,ends_with("delay"),
       distance,air_time
     )
     mutate(flights_sml,
       gain = arr_delay - dep_delay,
       speed = distance / air_time * 60
     )

如果只想保留新变量,可以使用 transmute() 函数:

     transmute(flights,
       gain = arr_delay - dep_delay,
       hours = air_time / 60,
       gain_per_hour = gain / hours
)

summarize

使用summarize()进行分组摘要

#每日平均延误时间:
by_day <- group_by(flights, year, month, day) 
summarize(by_day, delay = mean(dep_delay, na.rm = TRUE))

欢迎关注~
选自:R数据科学

你可能感兴趣的:(使用dplyr进行数据转换)