《R数据科学实战:工具详解与案例分析 》 —2.3.6 separate_rows/nest/unest—行数据处理
2.3.6 separate_rows/nest/unest—行数据处理
1. separate_rows—拆分“单元格”
当遇到一个数据单位中出现多个数值的情况时,separate_rows函数就会显得非常有用。图2-3中展示了最基本的函数逻辑,将一个数据单位中的不同数值按照参数进行sep中给出的参进行数拆分,然后将拆分之后的结果顺序地放在同一列的不同行中,并自动增加行数。
图2-3 separate_rows函数的工作原理示意图
separate_rows函数的参数及功能说明详见表2-18。
表2-18 separate_rows函数的参数及功能说明对照
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运行结果一
将序号列排除在外,压缩其余变量列,代码如下:
> df_tidy %>%
nest(-序号)
上述代码运行结果如表2-20所示。
表2-20 函数nest运行结果二
单独使用nest函数没有任何实际价值,但是当配合循环(第4章)和purrr包(第5章)中的map函数家族时,nest函数就会显示出强大的功能性。对dplyr包有一定了解的读者可以跳过第3章,直接查看nest与其他具有循环功能的函数结合使用的例子。
表2-21和表2-22中列举了nest/unest这一对函数的参数及功能说明。需要提醒读者一点的是,如果需要使用unnest函数“解压缩”两列及以上时,那么每一列中数据框的行数都必须相等,否则无法成功“解压”。
表2-21 函数nest参数及功能说明对照
表2-22 函数unnest参数中英文对照
- 点赞
- 收藏
- 关注作者
评论(0)