《R数据科学实战:工具详解与案例分析 》 —2.3.6 separate_rows/nest/unest—行数据处理

举报
华章计算机 发表于 2019/11/09 20:10:27 2019/11/09
【摘要】 本节书摘来自华章计算机《R数据科学实战:工具详解与案例分析》 一书中第二章,第2.3.6节,作者刘 健 邬书豪 。

2.3.6 separate_rows/nest/unest—行数据处理

1. separate_rows—拆分“单元格”

当遇到一个数据单位中出现多个数值的情况时,separate_rows函数就会显得非常有用。图2-3中展示了最基本的函数逻辑,将一个数据单位中的不同数值按照参数进行sep中给出的参进行数拆分,然后将拆分之后的结果顺序地放在同一列的不同行中,并自动增加行数。

 image.png

图2-3 separate_rows函数的工作原理示意图

separate_rows函数的参数及功能说明详见表2-18。

表2-18 separate_rows函数的参数及功能说明对照

image.png


 

2. nest/unest—“压缩”和“解压缩”行数据

nest/unest是两个互逆函数,它们最重要的功能是将一个数据框,按照用户自定义的规则,将其压缩成一个新的数据框,新的数据框中包含列表型数据。Jenny Bryan认为这是目前最有实际操作意义的数据框形式,因为它比较符合人们对数据集形式的一般主观印象,而且数据框同时还保留了列表格式的灵活性。下面就来通过代码具体介绍nest函数的实现机制。

将2.3.4节中清理后的数据保存为df_tidy,然后再将该数据框传递给nest函数,并设定压缩除性别列以外的变量。函数运行的结果是生成了一个只有两列的新数据框,变量为性别和data,其中,data列包含了原数据框中其他三个变量的数据(具体见表2-19)。变量data列中的列表格式将三个变量存储为三个独立的元素,如果读者对两个列表中任意一个进行as_tibble运算,都会得到一个完整的数据框。示例代码如下:

  > df_tidy %>%

nest(-性别)

上述代码运行结果如表2-19所示。

表2-19 函数nest运行结果一

image.png

 

将序号列排除在外,压缩其余变量列,代码如下:

  > df_tidy %>%

nest(-序号)

上述代码运行结果如表2-20所示。

表2-20 函数nest运行结果二

image.png

 

单独使用nest函数没有任何实际价值,但是当配合循环(第4章)和purrr包(第5章)中的map函数家族时,nest函数就会显示出强大的功能性。对dplyr包有一定了解的读者可以跳过第3章,直接查看nest与其他具有循环功能的函数结合使用的例子。

表2-21和表2-22中列举了nest/unest这一对函数的参数及功能说明。需要提醒读者一点的是,如果需要使用unnest函数“解压缩”两列及以上时,那么每一列中数据框的行数都必须相等,否则无法成功“解压”。

表2-21 函数nest参数及功能说明对照

image.png

 

表2-22 函数unnest参数中英文对照

image.png


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。