R语言:以多列标准筛选特定行

作者: 天善智能 | 来源:发表于2019-02-11 14:43 被阅读3次

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

    对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

    作者:村长,数据科学、指弹吉他及录音工程爱好者,浙大金融学博士在读,在data.table包和MongoDB的使用上有较多经验。

    在前面

    本期我们大猫二人组的村长在新的一年首先回归,为大家带来新的推送。

    在本期,我们会运用一个病例数据为大家进行讲解示范,这也是大猫课堂第一次针对阅读者提问进行的反馈,也希望大家能提供一些有趣的问题,来和我们一起分享,同时也感谢读者孤鹜惜秋,与我们分享其问题。话不多说,马上进入正题。

    题提出

    在data.table语句中,i是用来进行行选择的重要组成部分,很多情况下我们都需要以很多列的同一个特殊值进行行的选择,大多数情况下,我们可能会针对所有的变量逐一写出条件,例如a==1&b==1&c==1....但这样的表达式很多时候并不方便和简洁,有时甚至会出现许多问题。首先来看看下面这个数据:

    这是一个病例数据,包含多个患者的诊断的时间,以及多个诊断的结果,在这里读者便提出,需要在所有这些诊断结果里面筛选出所有出现过醛固酮,但不包括继发性醛固酮的所有行。在这里如果对每一个条件进行输入,需要输入20多个变量的判定,而且这里的变量名非常的脏,不利于变量名的输入。我们先把这一行代码优雅的放上来(PS:在运行这一行代码前我们已经对数据进行了适当清洗,批量生成了22个带'_xtrct'后缀的变量,观察值是醛固酮、继发性醛固酮或者无,但这部分批量生成的代码不作为这次讲解的内容, 会在以后的公众号推送中为大家讲解):

    clinic <- clinic[rowMeans(clinic[, 31:52] == "醛固酮") > 0 & rowMeans(clinic[, 31:52] != "继发性醛固酮") == 1]

    我们再来看看结果:

    结果非常出色,不过大家看到这一段语句是不是有点懵,不用着急,待小编慢慢讲解。

    码解读

    里层代码

    我们先从最里面的一层代码开始, 首先来看下面一段代码的运行结果:

    clinic[, 31:52] == "醛固酮"

    从运行结果可以看出这是一个logic结果判定矩阵,里面主要判定这个矩阵里面是否是醛固酮, 如果是返回TRUE,如果不是返回FALSE,同理于代码:

    clinic[, 31:52] != "继发性醛固酮"

    判定是否观察值里面是否是继发性醛固酮,如果不是返回TRUE,如果是返回FALSE。

    外层代码

    下面来看外层代码:

    rowMeans(clinic[, 31:52] == "醛固酮") > 0

    这里运用了R语言中非常关键的一个知识点:对逻辑判断值进行四则运算时,TRUE会被当做1,FALSE会被当做0, 这一点在这里非常重要!!!!

    那么在这里求每一行的均值,只要出现了醛固酮,那就会至少出现一个TRUE,那么行的均值就肯定大于零,所以就将出现了醛固酮的行全都标记出来了,同理可得下面这行代码:

    rowMeans(clinic[, 31:52] != "继发性醛固酮") == 1

    标记出了所有没有出现继发性醛固酮的行。

    这样我们把这两个条件合并在一起,然后配套上data.table的语句,就成了我们一开始出现的那条代码:

    clinic <- clinic[rowMeans(clinic[, 31:52] == "醛固酮") > 0 & rowMeans(clinic[, 31:52] != "继发性醛固酮") == 1]

    在结尾

    应用好对象格式是R语言编程中的精髓之一,在这个例子中就很好的利用了对象格式里面的格式性质,做了一些适当的变通处理,让数据处理过程变得更加巧妙和方便,这点大家可以在以后的数据处理中做更多的尝试和思考!

    期预告

    下一期我们将讲述在这一次数据处理中遇到的另外一个问题,问题的内容已经在前文中说明。祝大家开工大吉!

    转载自公众号:大猫的R语言课堂

    往期精彩:

      还在用tm?你OUT啦!

    从一件数据清洗的小事说起

    用data.table语句批量处理变量

    关于data.table中i,&nbsp;j,&nbsp;by都为数字的理解

    R语言:哪个函数解析时间最快?

    公众号后台回复关键字即可学习

    回复 爬虫            爬虫三大案例实战

    回复 Python       1小时破冰入门

    回复 数据挖掘     R语言入门及数据挖掘

    回复 人工智能     三个月入门人工智能

    回复 数据分析师  数据分析师成长之路 

    回复 机器学习     机器学习的商业应用

    回复 数据科学     数据科学实战

    回复 常用算法     常用数据挖掘算法

    相关文章

      网友评论

        本文标题:R语言:以多列标准筛选特定行

        本文链接:https://www.haomeiwen.com/subject/lusqeqtx.html