1. 在tidyr包中有一个who数据集,是世界卫生组织调查的结核病数据,这是一个不符合整洁数据的数据集,我们要把它变整洁。首先用who查看一下数据是什么样的(提示:>后直接输入who并回车);然后查看who的说明(?who);说明中有关于变量的描述,该数据集共有60列,第5-60列包含了3个变量,“new_”后面的代码标识不同的诊断方法“method of diagnosis”(rel= relapse, sn= negative pulmonary smear, sp= positive pulmonary smear, ep= extra pulmonary),数字前面紧跟的是性别代码(m,f),数字代表年龄分组(0-14,15-24,25-34…55-64,65+)。 1) 假如我们对采用relapse方法检测到的记录感兴趣,选取字段iso2,year,newrel_m014:newrel_f65; 2) 试用gather和separate将它转成整洁的数据集。可以分步做,最后的结果数据集包含6个字段: iso2,year,method=”rel”,gender,agegroup=(”014”…”65”) ,count。 提示:你需要用到的函数有select(),gather(),separate(),mutate(),substr(), length()。 3) agegroup字段能够用parase_number函数析出?为什么?
时间: 2024-04-02 18:35:59 浏览: 11
1. 输入who可以查看数据集的内容和结构,说明中有关于变量的描述;选取字段iso2,year,newrel_m014:newrel_f65可以得到采用relapse方法检测到的记录;
2. 首先使用select()函数选取所需的列,然后使用gather()函数将每个年龄组的计数转换成单独的行,再使用separate()函数将年龄组信息分离成gender和agegroup两个字段,最后使用mutate()函数添加method字段;
```
library(tidyr)
library(dplyr)
who %>%
select(iso2, year, newrel_m014:newrel_f65) %>%
gather(key = "agegroup", value = "count", newrel_m014:newrel_f65) %>%
separate(agegroup, into = c("gender", "agegroup"), sep = -3) %>%
mutate(method = "rel")
```
3. 可以使用parse_number()函数将agegroup字段解析为数值,因为agegroup字段的值都是由数字组成的字符串,例如"014"、"1524"等。parse_number()函数会将字符串中的数字提取出来并转换为数值类型。
相关问题
1. 在tidyr包中有一个who数据集,是世界卫生组织调查的结核病数据,这是一个不符合整洁数据的数据集,我们要把它变整洁。首先用who查看一下数据是什么样的(提示:>后直接输入who并回车);然后查看who的说明(?who);说明中有关于变量的描述,该数据集共有60列,第5-60列包含了3个变量,“new_”后面的代码标识不同的诊断方法“method of diagnosis”(rel= relapse, sn= negative pulmonary smear, sp= positive pulmonary smear, ep= extra pulmonary),数字前面紧跟的是性别代码(m,f),数字代表年龄分组(0-14,15-24,25-34…55-64,65+)。 1) 假如我们对采用relapse方法检测到的记录感兴趣,选取字段iso2,year,newrel_m014:newrel_f65; 2) 试用gather和separate将它转成整洁的数据集。可以分步做,最后的结果数据集包含6个字段: iso2,year,method=”rel”,gender,agegroup=(”014”…”65”) ,count。 提示:你需要用到的函数有select(),gather(),separate(),mutate,substr(), length()。 3) agegroup字段能够用parase_number函数析出?为什么?
1. 首先输入who命令查看数据:
```
> who
```
2. 然后输入 ?who 查看说明。
3. 选取字段iso2,year,newrel_m014:newrel_f65:
```
select(iso2, year, newrel_m014:newrel_f65)
```
4. 使用gather将它转成整洁的数据集:
```
gather(key = "agegroup", value = "count", newrel_m014:newrel_f65, na.rm = TRUE)
```
5. 使用separate将agegroup字段分成gender和agegroup两个字段,并将method字段设置为"rel":
```
separate(col = agegroup, into = c("gender", "agegroup"), sep = 2) %>%
mutate(method = "rel")
```
6. 最终整洁的数据集包含6个字段: iso2,year,method=”rel”,gender,agegroup=(”014”…”65”) ,count。
3. 可以使用parse_number函数析出agegroup字段中的数字,因为agegroup字段中的值都是由数字组成的字符串,parse_number函数可以将字符串中的数字解析出来。例如,parse_number("014") 的结果为14。
1) 在tidyr包中有一个who数据集并完成以下操作, 2) 用factor函数把method和gender转换成正确的因子类型,如gender应该有两个水平,f,m;method应该有4个水平(rel,sn,sp,ep),尽管其他水平在我们选取的子集中没有出现。 3) 用summary查看who概括信息;iso2字段是标准化国家代码,根据这个字段先汇总出每个国家结核病诊断累计值;再汇总出每个国家不同性别的诊断累计值。(提示:用group_by,summarize函数完成)。
好的,我明白了你的问题。以下是代码实现:
```R
library(tidyr)
# 加载数据集
data(who)
# 将method和gender转换为因子类型
who$method <- factor(who$method, levels = c("rel", "sn", "sp", "ep"))
who$gender <- factor(who$gender, levels = c("f", "m"))
# 查看who数据集的概括信息
summary(who)
# 按照国家和性别分组,并汇总诊断累计值
who_summary <- who %>% group_by(iso2, gender) %>%
summarize(total_cases = sum(cases))
# 按照国家汇总诊断累计值
who_country_summary <- who %>% group_by(iso2) %>%
summarize(total_cases = sum(cases))
```
请注意,上述代码中的 `who_summary` 和 `who_country_summary` 是两个不同的数据框,分别汇总了每个国家不同性别的诊断累计值和每个国家的诊断累计值。