Я объединил два набора данных из одного опроса. Один на индивидуальном уровне selectedindividual
, а другой на уровне домохозяйства selectedhousehold
. Я объединил два набора данных, используя следующий код (используя left_join
из dplyr
):
mergeddf <- left_join(selectedhousehold, selectedindividual) %>% group_by(shserial) %>% slice (1)
Переменная shserial
является первичным ключом, присутствующим в обоих наборах данных. Каждое домохозяйство имеет определенный номер c. Каждое домохозяйство может содержать до двух человек, которые поэтому будут иметь одинаковые shserial
. Поскольку я хочу провести свой анализ на уровне домохозяйства, я не хотел просто использовать merge()
для наборов данных (поскольку это дублировало наблюдения в домохозяйствах с двумя индивидуумами, например, для одной из моих зависимых переменных в домохозяйстве уровень - GrossIncome
).
У меня все еще есть проблема:
У меня есть переменная на индивидуальном уровне, WrkStat
(с тремя уровнями, working
, NWork
, FTEduc
), которую я хочу включить в мою модель. Код, который я использовал для объединения наборов данных, сохранил только первые наблюдения для двух shserials с одинаковым номером (я предполагаю, что, по крайней мере, я не мог понять, как работает slice()
точно). Это не очень хорошо для моего анализа, так как я не хочу случайным образом выбирать одного из двух человек в семье. Чтобы проиллюстрировать сводную статистику WrkStat
как в не объединенном, так и в объединенном фреймах данных:
> summary(selectedindividual$WrkStat)
working FTEduc NWork NA's
324 748 2455 201
> summary(mergeddf$WrkStat)
working FTEduc NWork NA's
251 77 2097 5
В качестве решения я решил создать новую переменную WrkStat2
, которая объединяет наблюдения для двух человек в одной семье. Я хочу создать эту переменную до слияния наборов данных.
Я надеялся, что смогу создать эту новую переменную на основе общего числа shserial
. Однако я не могу понять, как это сделать.
РЕДАКТИРОВАТЬ:
Структура моего кадра данных:
selectedindividual <- structure(list(`shserial` = c(1010574, 1010574,
1011104, 1011104, 1011109, 1011109, 1011134, 1011134, 1011142,
1011143, 1011148, 1011148, 1011154, 1011154, 1011156, 1011171,
1011171, 1011174, 1011174, 1011182), `WrkStat` = structure(c(3L,
2L, 3L, 2L, 3L, NA, 1L, NA, 3L, 3L, 3L, 2L, 3L, 2L, 3L, 1L, 2L,
3L, NA, 3L), .Label = c("working", "FTEduc", "NWork"), class = "factor")), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
Дает этот вывод:
shserial WrkStat
<dbl> <fct>
1 1010574 NWork
2 1010574 FTEduc
3 1011104 NWork
4 1011104 FTEduc
5 1011109 NWork
6 1011109 NA
7 1011134 working
8 1011134 NA
9 1011142 NWork
10 1011143 NWork
11 1011148 NWork
12 1011148 FTEduc
13 1011154 NWork
14 1011154 FTEduc
15 1011156 NWork
16 1011171 working
17 1011171 FTEduc
18 1011174 NWork
Я хотел бы этот вывод:
shserial WrkStat2
<dbl> <fct>
1 1010574 NWork/FTEduc
2 1011104 NWork/FTEduc
3 1011109 NWork
4 1011134 working
5 1011142 NWork
6 1011143 NWork
7 1011148 NWork/FTEduc
8 1011154 NWork/FTEduc
9 1011156 NWork
10 1011171 working/FTEduc
11 1011174 NWork
(Это также удаляет NA, которые не являются самостоятельными (так что это не комбинированный WrkStat), хотя я думаю, что было бы также хорошо, если бы все NA были удалены в этом процессе).
Еще одно редактирование:
WrkStat2
должно иметь следующие метки:
"working/working",
"working/NWork",
"working/FTEduc",
"NWork/NWork",
"NWork/FTEduc",
"FTEduc/FTEduc",
"working",
"NWork",
"FTEduc"
Извините, если что-то неясно или все невозможно (дайте мне знать ). Я не очень хорош в логическом мышлении и боролся с этим несколько дней.