#r
Вопрос:
У меня есть большой набор данных, в котором статус занятости людей регистрируется ежемесячно в течение одного года (>6.000.000 наблюдений от >>500.000 человек). Это выглядит так:
ID <- c(1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3, 1:3)
Month <- c("Jan", "Jan", "Jan", "Feb", "Feb", "Feb", "Mar", "Mar", "Mar", "Apr", "Apr", "Apr",
"May", "May", "May", "Jun", "Jun", "Jun", "Jul", "Jul", "Jul", "Aug", "Aug", "Aug",
"Sep", "Sep", "Sep", "Oct", "Oct", "Oct", "Nov", "Nov", "Nov", "Dec", "Dec", "Dec")
Activity <- c("Unemployed", "Unemployed", "Other", "Employed", "Employed", "Unemployed", "Employed",
"Employed", "Employed", "Unemployed", "Unemployed", "Unemployed", "Unemployed", "Unemployed",
"Unemployed", "Employed", "Employed", "Employed", "Other", "NA", "Unemployed", "Employed", "Unemployed",
"Employed", "Inactive", "Unemployed", "Employed", "Employed", "Employed", "Unemployed",
"Other", "Unemployed", "Employed", "Unemployed", "Other", "Other")
df <- data.frame(ID, Month, Activity)
df[order(ID),]
ID Month Activity
1 1 Jan Unemployed
4 1 Feb Employed
7 1 Mar Employed
10 1 Apr Unemployed
13 1 May Unemployed
16 1 Jun Employed
19 1 Jul Other
22 1 Aug Employed
25 1 Sep Inactive
28 1 Oct Employed
31 1 Nov Other
34 1 Dec Unemployed
2 2 Jan Unemployed
5 2 Feb Employed
8 2 Mar Employed
11 2 Apr Unemployed
14 2 May Unemployed
17 2 Jun Employed
20 2 Jul NA
23 2 Aug Unemployed
26 2 Sep Unemployed
29 2 Oct Employed
32 2 Nov Unemployed
35 2 Dec Other
3 3 Jan Other
6 3 Feb Unemployed
9 3 Mar Employed
12 3 Apr Unemployed
15 3 May Unemployed
18 3 Jun Employed
21 3 Jul Unemployed
24 3 Aug Employed
27 3 Sep Employed
30 3 Oct Unemployed
33 3 Nov Employed
36 3 Dec Other
Чего я хочу добиться-это создать новую таблицу данных, которая имеет одну строку для каждого занятости заклинание, но с оговоркой, что только занятость заклинания включены в котором до и после произошедших в период безработицы. Это означает, что я хочу включить только заклинания занятости, где люди перешли от безработицы на работу и обратно в безработицу и уметь рассчитать длительность каждого из этих заклинаний занятости. Также необходим начальный и Конечный месяц каждого трудового заклинания. Конечный кадр данных должен выглядеть следующим образом:
ID Starting Ending Duration
1 1 Feb Mar 2
3 2 Feb Mar 2
5 2 Oct Oct 1
6 3 Mar Mar 1
7 3 Jun Jun 1
8 3 Aug Sep 2
Комментарии:
1. Спасибо, что указали на это, я исправил это!
Ответ №1:
Чтобы получить только те периоды занятости, которые находятся между безработными, вы можете использовать —
library(dplyr)
df %>%
arrange(ID) %>%
group_by(ID, grp = data.table::rleid(Activity)) %>%
summarise(Activity = first(Activity),
Starting = first(Month),
Ending = last(Month),
Duration = n()) %>%
#Keep only those 'Employed' rows that are surrounded by 'Unemployed' ones
filter(Activity == 'Employed',
lag(Activity) == 'Unemployed', lead(Activity) == 'Unemployed') %>%
ungroup %>%
select(-grp, -Activity)
# ID Starting Ending Duration
# <int> <chr> <chr> <int>
#1 1 Feb Mar 2
#2 2 Feb Mar 2
#3 2 Oct Oct 1
#4 3 Mar Mar 1
#5 3 Jun Jun 1
#6 3 Aug Sep 2