У меня есть следующий снимок) моего набора данных:
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")
(В моем реальном наборе данных у меня есть месячные данные, но идея та же).
Используя эти данные, я хотел бы построить две линии (одну для мужской когорты, равную единице, и одну для мужской когорты, равную 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, поскольку он дает правильный процент каждой когорты, работающей в каждый год, но не представляет ее для каждой когорты.
Буду признателен за любую помощь.