
这是该系列的第五篇(终篇),第一、二、三、四篇见:
张敬信:玩转数据处理120题之P1-P20(R语言tidyverse版本)zhuanlan.zhihu.com



本篇是P101-P120. 需要的数据文件:
链接:https://pan.baidu.com/s/1X3xBjL7ww_RPGSglqSwQ9Q
提取码:owus
先加载包:
library
题目101(数据读取):从csv文件中读取指定数据:读取前10行, positionName和salary列
难度:★★
代码及运行结果:
read

注1:该数据是GBK编码,为避免中文乱码,GBK编码的csv或txt用read.csv()读取;UTF-8编码的csv或txt用readr::read_csv()读取;若用read_csv()读取GBK编码文件,需要设置编码(见题目110)。
注2:R中常规读取数据不能在读取时选择列,采用读取之后选择列。
题目102(数据读取):从csv文件中读取数据,将薪资大于10000的改为"高"
难度:★★
代码及运行结果:
df

题目103(数据操作):从df中对薪资水平每隔20行进行抽样
难度:★★
代码及运行结果:
df

题目104(数据操作):取消使用科学记数法
难度:★★
代码及运行结果:
set

题目105(数据操作):将上一题的数据转换为百分数
难度:★★★
代码及运行结果:
df

题目106(数据操作):查找上一题数据中第3大值的行号
难度:★★★
代码及运行结果:
order

题目107(数据操作):反转df的行
难度:★★
代码及运行结果:
df

题目108(数据连接:全连接):根据多列匹配合并数据,保留df1和df2的观测
难度:★★
代码及运行结果:
df1

df2

df1 %>%
full_join(df2, by = c("key1", "key2"))

题目109(数据连接:左连接):根据多列匹配合并数据,只保留df1的观测
难度:★★
代码及运行结果:
df1

注:dplyr包还提供了右连接:right_join(),内连接:inner_join(),以及用于过滤的连接:半连接:semi_join(),反连接:anti_join().
题目110(数据处理):再次读取数据1并显示所有列
难度:★★
代码及运行结果:
df



题目111(数据操作):查找secondType与thirdType值相等的行号
难度:★★
代码及运行结果:
which

题目112(数据操作):查找薪资大于平均薪资的第三个数据
难度:★★★
代码及运行结果:
df

题目113(数据操作):将上一题数据的salary列开根号
难度:★★
代码及运行结果:
df

题目114(数据操作):将上一题数据的linestation列按_拆分
难度:★★★
代码及运行结果:
df

注:正常需要先按“;”分割,再分别按“-”分割。
题目115(数据查看):查看上一题数据一共有多少列
难度:★
代码及运行结果:
ncol

题目116(数据操作):提取industryField列以"数据"开头的行
难度:★★
代码及运行结果:
df

题目117(数据分组汇总):以salary score和positionID做数据透视表
难度:★★★
代码及运行结果:
df

题目118(数据分组汇总):同时对salary、score两列进行汇总计算
难度:★★★
代码及运行结果:
df

注:若要分组再这样汇总,前面加上group_by(grpvar)即可;若改用dplyr1.0的cross()会更加简洁。
题目119(数据分组汇总):同时对不同列进行不同的汇总计算:对salary求平均,对score求和
难度:★★★
代码及运行结果:
df

注:若要分组再这样汇总,前面加上group_by(grpvar)即可。
题目120(数据分组汇总):计算并提取平均薪资最高的区
难度:★★★★
代码及运行结果:
df

后记
- 120道数据处理题目做完了,个别题目是经过查阅写成,尽量采用最简洁、优雅的方式来实现。总体来说,题目比较简单,没太涉及到复杂的数据处理,适合用来学习和练手。
- 全部代码都是在dplyr 0.8.4下实现,就在今天dplyr包正式升级到1.0.0版本,后续我将更新到该版本。只有极少数题目有更简洁的写法,暂时先不做改写。
- 花时间写这个系列,当然自己能进一步学习巩固,同时也希望推广 2017 年以来的“新”R,特别是tidyverse流,打消多数人对R不好用的误解。
参考文献
遥遥无期:玩转数据处理120题|Pandas版本zhuanlan.zhihu.com