你好,我是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都是小写的。