使用 ggplot2 绘制每个队列的工作状态?
Plotting work status per cohort using ggplot2?
我的数据集有以下快照:
df<-data.frame( c(2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016), c(1,1,1,1,1,1,2,2,2), c(1,1,0,0,0,0,0,0,0), c("q1", "q1", "q1", "q2","q2","q2", "q3", "q3", "q3"))
colnames(df)<-c("year", "male.cohort", "male.work", "householdid")
(在我的真实数据集中我有月度数据,但思路是一样的)。
使用此数据,我想绘制两条线(一条表示男性队列等于 1,一条表示男性队列等于 2)表示每个时间点(在本例中为 2014 年)工作的男性比例,2015,2016).我尝试使用以下代码,但它没有提供我正在寻找的解决方案:
test <- as.data.frame(unlist(tapply(df$male.work,INDEX = df[,c("year","male.cohort")], function(x){sum(x)/length(x)})))
colnames(test) <- "frac"
test$year <- rownames(test)
ggplot()+geom_line(data = test, aes(x=year,y=frac))
我认为我在使用 tapply 时做错了,因为它给出了每年每个队列工作的正确百分比,但它并不代表每个队列。
如有任何帮助,我将不胜感激。
应该可以试试
library(dplyr)
library(ggplot2)
df %>%
mutate_at(vars(year, male.cohort), factor) %>%
group_by(year, male.cohort) %>%
summarise(work_perc = sum(male.work)/n()) %>%
ggplot() + aes(year, work_perc, color = male.cohort, group = male.cohort) +
geom_line()
我的数据集有以下快照:
df<-data.frame( c(2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016), c(1,1,1,1,1,1,2,2,2), c(1,1,0,0,0,0,0,0,0), c("q1", "q1", "q1", "q2","q2","q2", "q3", "q3", "q3"))
colnames(df)<-c("year", "male.cohort", "male.work", "householdid")
(在我的真实数据集中我有月度数据,但思路是一样的)。
使用此数据,我想绘制两条线(一条表示男性队列等于 1,一条表示男性队列等于 2)表示每个时间点(在本例中为 2014 年)工作的男性比例,2015,2016).我尝试使用以下代码,但它没有提供我正在寻找的解决方案:
test <- as.data.frame(unlist(tapply(df$male.work,INDEX = df[,c("year","male.cohort")], function(x){sum(x)/length(x)})))
colnames(test) <- "frac"
test$year <- rownames(test)
ggplot()+geom_line(data = test, aes(x=year,y=frac))
我认为我在使用 tapply 时做错了,因为它给出了每年每个队列工作的正确百分比,但它并不代表每个队列。
如有任何帮助,我将不胜感激。
应该可以试试
library(dplyr)
library(ggplot2)
df %>%
mutate_at(vars(year, male.cohort), factor) %>%
group_by(year, male.cohort) %>%
summarise(work_perc = sum(male.work)/n()) %>%
ggplot() + aes(year, work_perc, color = male.cohort, group = male.cohort) +
geom_line()