搜索
查看: 97|回复: 0

[R] <R for Data Science> 读书笔记2 | 第三章: 数据转换 [dplyr package]

[复制链接]

3

主题

3

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2018-10-9 12:35:48 | 显示全部楼层 |阅读模式
3.1使用的数据:nycflights13:flights
3.2 使用filter() 筛选行
Filter() 函数可以基于观测的值筛选出一个观测子集
筛选1月1日所有航班:
[AppleScript] 纯文本查看 复制代码
filter(flights,month==1,day==1)
如果需要保存下新的数据框,则直接将filter赋值给一个变量
jan1<-filter(flights,month==1,day==1)
如果既输出也保存变量,则加括号
(jan1<-filter(flights,month==1,day==1))
3.2.1 比较运算符
比较运算符: >, >=, <, <=, !=, ==
3.2.2 逻辑运算符
Filter中的多个参数由“与”组合
&:与
|:或

!:非

[AppleScript] 纯文本查看 复制代码
筛选11月或12月的航班
filter(flights,month==11|month==12)

x %in% y :选取出x是y中的一个值时的所有行
filter(flights,month%in%c(11,12))

3.2.3 缺失值
is.na(x) 确定一个值是否为缺失值

filter只能筛选出条件为TRUE的行,会排除条件为FALSE和NA的行,如果想保留缺失值,需指出
[AppleScript] 纯文本查看 复制代码
filter(df,is.na(x)|x>1)

3.3 使用arrange() 排列行

如果列名不只一个,就使用后面的列在前面排序的基础上排序
[AppleScript] 纯文本查看 复制代码
arrange(flights,year,month,day)

desc()可以按列进行降序排序
arrange(flights,desc(arr_delay))

缺失值总是排在最后 

3.4使用select()选择列
[AppleScript] 纯文本查看 复制代码
#按名称选择列[/align]select(flights,year,month,day)

#选择“year”和“day”之间的所有列
select(flights,year:day)

#选择不在“year"和"day"之间的所有列
select(flights,-(year:day))

select中的辅助函数:
starts_with(“abc”)
ends_with(“xyz”)
contains(“ijk”)

#使用rename()函数来重命名变量
rename(flights,tail_num=tailnum)

#将select()和everything()结合使用,可将几个变量移到数据框开头
select(flights,time_hour,air_time,everything())

练习
[AppleScript] 纯文本查看 复制代码
#1.从数据集中选择dep_time,dep_delay,arr_time和arr_delay
select(flights,dep_time,dep_delay,arr_time,arr_delay)

#2.如果在select()函数中多次计入一个变量名,会发生什么情况?
select(flights,dep_time,dep_time)
select(flights,dep_time)
#结果是相同的
select(flights,dep_time,dep_time,dep_time)

#3.one_of()函数的作用是什么?为什么它结合以下向量使用时非常有用?
vars<-c(
  "year","month","day","dep_delay","arr_delay"
)
select(flights, one_of(vars))

#4.辅助函数忽略大小写
select(flights,contains("TIME"))


3.5 使用mutate()添加新变量
[AppleScript] 纯文本查看 复制代码
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
       )
mutate(flights_sml,
       gain=arr_delay-dep_delay,
       hours=air_time/60,
       gain_per_hour=gain/hours
       )
如果只想保留新变量,可以使用transmute()函数

3.5.1常用创建函数
算术运算符:+,-,*,/,^
模运算符:%/%(整数除法),%%(求余),可用于拆分整数
对数函数:log(), log2(), log10()
在处理取值范围横跨多个数量级的数据时使用
推荐使用log2()
偏移函数:
lead()
lag()
累加和滚动聚合:cumsum(), cumprod(), commin(), cummax(),cummean()
逻辑比较:<,<=,>,>=,!=
排秩:min_rank










上一篇:请问有没有人做过TCR(T细胞免疫组库)相关的课题
下一篇:第12章 1-2节
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2018-10-24 01:18 , Processed in 0.109655 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.