- 数据读取:读入
csv
数据。 - 输入处理:检验输入参数
state
的合法性。这里提供两种思路:
- 手动建立一个包含美国 50 州缩写的
vector
,检查state
是否存在于这个vector
之中,否则非法输入。 - 从第一步读入的数据里面提取
State
列所有不同的值,这些值就是合法的州缩写,把它们汇集成一个vector
,这样就免去人工输入。
- 输入处理:检验输入参数
outcome
的合法性,并根据outcome
的值,确认需要哪一列数据。 - 数据清理:把原始数据中
医院名字
、医院所在州
和outcome 对应的死亡率数据
提取出来,变成一个新的data.frame
。 - 数据清理:把
死亡率数据
一列的数据转换为numeric
,去除NA
。 - 数据清理:剔除
医院所在州
不等于state
的数据。 - 数据处理:对清理之后的数据按照
死亡率数据
和医院名字
两列降序排序。 - 结果返回:返回排序后第一家医院。
===
- 第 1 步至第 7 步和函数
best
完全一样。接下来: - 输入处理:判断
num
的内容,申明一个变量return_rank
: - 如果是
best
,return_rank
等于1
; - 如果是
worst
,return_rank
等于第 7 步中排序之后数据列表的总行数; - 否则,
return_rank
就等于num
,不过num
是一个character
,注意数据类型的转换。 - 结果返回:返回第 7 步中排序之后数据列表的第
return_rank
行的医院名字。
===
- 这题最简单粗暴的办法是把每一个州放到函数
rankhospital
里面去运行一遍,同时生成一个data.frame
。不过这样非常低效,一定要避免,写这种代码以后要被炒鱿鱼的。 - 观察一下以上思路低效的原因是什么,就在于每处理一个州,都有重读一遍数据,并且把其他州的数据过滤掉。解决方法就是用
split
,把读取的csv
数据分成 50 份,这样每个州的数据分开,节省了重复的操作。
- 数据读取:读入
csv
数据。 - 输入处理:检验输入参数
outcome
的合法性,并根据outcome
的值,确认需要哪一列数据。 - 数据清理:把原始数据中
医院名字
、医院所在州
和outcome 对应的死亡率数据
提取出来,变成一个新的data.frame
,记作df
。 - 数据清理:把
死亡率数据
一列的数据转换为numeric
,去除NA
。 - 数据处理:用
split
把df
按State
分成不同的子表。 - 结果返回:申明一个空的
data.frame
,包含hospital
和state
两列。注意使用stringsAsFactors=FALSE
这一选项,非常重要,也要牢记这一选项的意义。 - 数据处理:用
for
循环对每一个州进行处理:
- 从
df
中提取需要的州的子数据集。 - 对子数据集按照
死亡率数据
和医院名字
两列降序排序。 - 类似第二题,判断
num
的内容,提取符合num
输入的医院名字
,写入第 6 步中申明的data.frame
。
- 数据返回:返回第 6 步中申明的
data.frame
。