今天小妹继续掰扯的仍是R语言数据处理领域的明星plyr 包里的,明星函数 ddply的一个参数,来看看这个函数用来“分组”的小秘密。
一 极速预览版
今天的主要内容是:在使用ddply 对数据集A进行分组时,既可以使用A的某列来分,也可以使用A以外的某列数来分;既可以使用A某列的原始值来分,也可以使用A的某列构造一个布尔值来分。
二 详细分解版
首先今天用来演示的数据集仍是一个构造出来的模拟数据,范例如下:
1. ddply的常规分组法
Hadley Wickham 大神说了,第二个参数是要定义这样一个变量:variables to split data frame by, as as.quoted variables,
aformulaorcharacter vector 故以下三种写法都是可以的。
2. ddply的花式分组法
除了干巴巴的用原来的变量分组,能不能变点花样出来?
有没有看到!强大的ddply既可以把变量进行变化后再分组,又可以用原来的变量构造新的判断条件来分组,有木有很高级? (虽然也可以先根据需要构造一个新变量加入原数据,再使用常规做法实现同样目标,但这样写相当于把两步合成一步,更简洁错的机会就更少啦!)
3.ddply的移花接木分组法
最后上ddply借用别的向量来分组的做法。此处添加一列学习成绩,看看学习成绩更高的人平均收入会更高吗?(模拟数据,仅供娱乐)
看到没?同样奏效!唯一需要注意的是:这个借来的向量长度 要与原数据的行数相同才行哦~
4. 小结
使用ddply时,不论索引变量如何设置,都只是给 “输入数据”一个分组的条件而已,只要通过这个变量能让电脑知道:它应该把哪些列放在一起,哪些列分开就可以了
---------------------------------------------
< 鸡汤时间 >
ddply从出生以来就被大家推崇备至,一个重要原因是它分组计算的技能。分组实际上对应的是很高深的“分类解决问题”的思想,借用Hadley Wickham 大神对plyr包的描述所言:
正所谓:学习编程,掌握的函数都只是工具,解决问题的思维才是核心。修炼的路上,以此共勉。