R语言 利用forcats::gss_cat数据解决下列问题。 #### 1. - 去掉年龄(age) 为NA的观测之后,将年龄(age)字段的值按照小于等于45岁,46-69岁,70岁及以上 分别更新为youth,middle_aged和old_people,将其数据类型转换为factor,并根据年龄从小到大指定因子水平(levels)的顺序。每一年龄组的样本分别是多少?(6分) #### 2. - 在上述数据的基础上,统计不同年份(year)、年龄段(age)与人(race)组合的样本数量;并通过长宽表转化(tidyr)使得每一个year-race组合只有一行观测,对每一行计算年轻人(youth)所占比例。最终所生成的数据集有几行几列?(8分) #### 3. - 绘制折线图,描述样本中不同种族年轻人所占比例随时间的变化趋势,图中用不同的颜色来区分种族,每个观测值表示为一个点,并用线把同一种族的点连接起来,最后为其添加有意义的坐标轴名称与标题。图中排在最上方的线对应的种族是什么?(6分)
时间: 2024-03-17 14:47:31 浏览: 23
1. 代码如下:
```R
library(forcats)
#读取数据
data <- read.csv("data.csv")
#去掉年龄为NA的观测
data <- data[!is.na(data$age),]
#将年龄分组并更新为youth,middle_aged和old_people
data$age_group <- ifelse(data$age <= 45, "youth",
ifelse(data$age <= 69, "middle_aged", "old_people"))
#将age_group转换为factor,并根据年龄从小到大指定因子水平(levels)的顺序
data$age_group <- factor(data$age_group, levels = c("youth", "middle_aged", "old_people"))
#每一年龄组的样本分别是多少
table(data$age_group)
```
2. 代码如下:
```R
library(tidyr)
#读取数据
data <- read.csv("data.csv")
#去掉年龄为NA的观测
data <- data[!is.na(data$age),]
#将年龄分组并更新为youth,middle_aged和old_people
data$age_group <- ifelse(data$age <= 45, "youth",
ifelse(data$age <= 69, "middle_aged", "old_people"))
#统计不同年份(year)、年龄段(age)与人(race)组合的样本数量
data_count <- data %>% group_by(year, race, age_group) %>% summarize(count = n())
#计算年轻人(youth)所占比例
data_count <- data_count %>% spread(age_group, count) %>%
mutate(youth_prop = youth / (youth + middle_aged + old_people)) %>%
select(year, race, youth_prop)
#将数据转换为长表格
data_long <- pivot_longer(data_count, cols = c("youth_prop"), names_to = "age_group", values_to = "count")
#观测行数和列数
dim(data_long)
```
3. 代码如下:
```R
library(ggplot2)
#读取数据
data <- read.csv("data.csv")
#去掉年龄为NA的观测
data <- data[!is.na(data$age),]
#将年龄分组并更新为youth,middle_aged和old_people
data$age_group <- ifelse(data$age <= 45, "youth",
ifelse(data$age <= 69, "middle_aged", "old_people"))
#统计不同年份(year)、年龄段(age)与人(race)组合的样本数量
data_count <- data %>% group_by(year, race, age_group) %>% summarize(count = n())
#计算年轻人(youth)所占比例
data_count <- data_count %>% spread(age_group, count) %>%
mutate(youth_prop = youth / (youth + middle_aged + old_people))
#绘图
ggplot(data_count, aes(x = year, y = youth_prop, color = race)) +
geom_point() + geom_line() +
scale_x_continuous(breaks = seq(min(data_count$year), max(data_count$year), by = 10)) +
labs(x = "年份", y = "年轻人占比", title = "不同种族年轻人占比随时间的变化趋势") +
theme_classic()
```
图中排在最上方的线对应的种族需要根据数据观察得出。