啊啊啊啊啊吖

2018-11-02   阅读量: 878

数据分析师 R语言

filter()函数--逻辑运算符

扫码加入数据分析学习群

filter() 中的多个参数是由“与”组合起来的:每个表达式都必须为真才能让一行观测包

含在输出中。如果要实现其他类型的组合,你需要使用布尔运算符: & 表示“与”、 | 表示

“或”、 ! 表示“非”。

使用dplyr进行数据转换

以下代码可以找出 11 月或 12 月出发的所有航班:

filter(flights, month == 11 | month == 12)

表达式中的运算顺序和语言中的是不一样的。你不能写成 filter(flights, month == 11 |

12) 这种形式。这种形式的文字翻译确实是“找出 11 月或 12 月出发的所有航班”,但在代

码中则不是这个意思,代码中的含义是找出所有出发月份为 11 | 12 的航班。 11 | 12 这个

逻辑表达式的值为 TRUE,在数字语境中(如本例), TRUE 就是 1,所以这段代码找出的不

是 11 月或 12 月出发的航班,而是 1 月出发的所有航班。真是够绕的!

这种问题有一个有用的简写形式: x %in% y。这会选取出 x 是 y 中的一个值时的所有行。

我们可以使用这种形式重写上面的代码:

nov_dec <- filter(flights, month %in% c(11, 12))

有时你可以使用德摩根定律将复杂的筛选条件进行简化: !(x & y) 等价于 !x | !y、 !(x |

y) 等价于 !x & !y。例如,如果想要找出延误时间(到达或出发)不多于 2 小时的航班,

那么使用以下两种筛选方式均可:

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

除 & 和 | 之外, R 中还有 && 和 || 运算符。先不要使用这两个运算符!

只要 filter() 函数中使用的是复杂的、包含多个部分的表达式,就需要考虑用一个明确的

变量来代替它。这样检查代码会容易很多。我们很快就会介绍如何创建新变量。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子