R语言dplyr

导入所需包
install.packages("nycflights13")
library(nycflights13)
library(tidyverse)
打开文件
getwd()        ##查看默认存储路径,再将csv文档存入文件夹打开
library(readxl)  
read.csv("hw1_a")
View(hw1_a)   #查看整个数据集
str(hw1_a)     #查看数据框各个变量的类型
summary(hw1_a)   #查看变量的最大值、最小值、四分位数、数值型变量的均值

library(psych)
describe(hw1_a)   #计算非缺失值的数量、平均数、标准差、中位数、最小值、最大值等

查看数据
?flights     #查看flights包的介绍
view(flights)   #查看整个数据集

&与 |或 !非
%/%(整数除法) %%(求余)

* 列名下方有缩写可以查看数据的类型:
int         整数型变量
dbl        双精度浮点数型变量(实数)
chr        字符向量
dttm      日期+时间型变量
lgl         逻辑性变量(仅包括TRUE和FALSE的变量)
fctr        因子(具有固定数目的值的分类变量)
date      日期型变量

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

filter( ) 按值筛选观测
arrange( ) 对行进行重新排序
select( ) 按名称选取变量
mutate( ) 使用现有变量的函数创建新变量
summarize( ) 将多个值总结为一个摘要统计量

①filter( )函数,按值筛选观测:
filter(flights, month == 1, day == 1)    #筛选出1月1日的所有航班
x %in% y    #选取出x是y中的一个值时的所有行
m<-filter(flights,month==11|month==12)    #找出11月或 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)   #按名称选择列
select(flights,year:day)   #选择"year"和"day"之间的所有列
select(flights,-(year:day)   #选择除开year和day之间的所有列

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

starts_with("abc")  #匹配以“abc”开头的名称
ends_with("xyz")  #匹配以“xyz”结尾的名称
contains("ijk")   #匹配包含“ijk”的名称
matches("(.)\\1")   #选择匹配正则表达式的那些变量,正则表达式会匹配名称有重复字符的变量。
num_range("x", 1:3)   #匹配x1、x2 和 x3
④mutate( )函数,使用现有变量的函数创建新变量:

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

mutate(flights_1,
gain=arr_delay-dep_delay,
speed=distance/air_time*60)   #在flights表格中增加gain和speed两项
  • 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( )函数,重命名
rename(flights,year1=year)  #将flights表格中的year重命名为year1
⑦缺失值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)