R语言——dplyr数据转换

install.packages("nycflights13")

library(nycflights13)

library(tidyverse)


查看flights包的介绍?      

##  ?flights

&与    |或     !非

%/%(整数除法)  %%(求余)


查看整个数据集?

##  view(flights)

列名下方有缩写可以查看数据的类型:

int         整数型变量

dbl        双精度浮点数型变量(实数)

chr        字符向量

dttm      日期+时间型变量

lgl         逻辑性变量(仅包括TRUE和FALSE的变量)

fctr        因子(具有固定数目的值的分类变量)

date      日期型变量


      五大核心dplyr函数的工作方式都是相同的,第一个参数是一个数据框;随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作;输出结果是一个新数据框。

filter( )               按值筛选观测

arrange( )          对行进行重新排序

select( )             按名称选取变量

mutate( )            使用现有变量的函数创建新变量

summarize( )      将多个值总结为一个摘要统计量


①filter( )函数按值筛选观测

#### 筛选出1月1日的所有航班

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

#### 选取出x是y中的一个值时的所有行

x %in% y

#### 找出11月或 12 月出发的所有航班:

m<-filter(flights,month==11|month==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)

• 选择"year"和"day"之间的所有列

    select(flights,year:day)

• 选择除开year和day之间的所有列

select(flights,-(year:day)


还可以在select ()函数中使用一些辅助函数

### 匹配以“abc”开头的名称

    starts_with("abc")

### 匹配以“xyz”结尾的名称

    ends_with("xyz")

### 匹配包含“ijk”的名称

    contains("ijk")

#### 选择匹配正则表达式的那些变量,正则表达式会匹配名称有重复字符的变量。

    matches("(.)\\1")

#### 匹配x1、x2 和 x3

num_range("x", 1:3)


mutate( )函数,使用现有变量的函数创建新变量:

(新列是现有列的函数,mutate将新列添加在数据集的最后)

• 在flights表格中增加gain和speed两项:

    mutate(flights_1,

gain=arr_delay-dep_delay,

speed=distance/air_time*60)


 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( )函数,重命名

 将flights表格中的year重命名为year1

rename(flights,year1=year)


⑦缺失值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")

你可能感兴趣的:(R语言——dplyr数据转换)