r tip:学习dplyr的case_when()函数

信息世界|2018年5月22日,

在《Do More with R》第二集中,IDG Communications的编辑数据和分析总监Sharon Machlis展示了dplyr的case_when()函数如何帮助避免许多嵌套的ifelse语句

版权©2018足球竞彩网下载

你好,我是Sharon Machlis, IDG Communications编辑数据分析总监。

在《Do More with R》的第二集中,我们将看到dplyr case_when()函数如何帮助\避免大量嵌套的ifelse语句。

关于数据,我有一份美国各州和它们的估计人口的列表,你可以在这里看到。

我还设置了R个变量来表示每个区域的状态


首先,让我加载州人口数据和USRegions文件,并加载dplyr包。

看看数据的结构。


这里的任务是为每个状态分配适当的划分。

有几种不同的方法可以做到这一点。一种常见的方法是使用R的ifelse函数。在R中,如果你想一次在整个向量上运行一个if语句,你通常使用特殊的ifelse函数,也就是ifelse一个字。

在这种情况下,它可能看起来像这样:

如果你只有几个选择,这确实有效。但我发现这种格式很难阅读,因为有很多选择。而且,我很容易犯错误,把右括号或逗号放在错误的地方。

如果我想按“组织”而不是“地区”来分配州呢?


这是9层嵌套的if-else !

Dplyr的case_when()有一个更简单的格式。这里的语法:


每个if-then语句都有自己的行。条件if test在左边。然后是波浪号,值在右边。除最后一行外,每一行都需要一个逗号。如果您希望对尚未定义的所有内容都有一个“全部捕获”值,那么将最后一个条件设为TRUE(我不确定为什么它是TRUE,但它确实是),然后将您的“全部捕获”值放在右边。完成了。

让我举一个简单的例子来测试一些数字是偶数还是奇数,或者——如果它们不是整数——也不是。

我将创建一个向量,数是1 2 3 4和5。7。让我们运行case_when来看看它们是偶数还是奇数。如果除以2余数是0,那就是偶数。如果余数是1,它是奇数。否则,它既不是。结果应该是奇数,偶数,奇数,偶数,neither。让我运行这个代码块:

奇数,偶数,奇数,偶数,都不是!

现在让我们看看状态区例子是怎样的。

这里,我将状态人口文件导入到R中,然后使用dplyr的突变函数添加一个名为Division的列。Division的值基于case_when语句。如果State是我的东北州名称向量,我将赋值为Northeast。等等。

让我运行一下


然后再看结果


看起来不错。没有“其他”值,所以所有的状态都被分配了。

这一集就到这里,感谢收看!更多关于R的技巧,请访问bit.ly/morewithR的更多视频页面。就是https B I T period L Y / more with R,除了R都是小写的。
IDG.tv精选视频