У меня есть 2 набора данных с 2 различными типами наблюдений. Наблюдения проводились в разные дни, и они записывались в разные промежутки времени.
Обе записи имеют серийный номер, который используется для идентификации группы людей, проводивших наблюдения. Например, серийный номер 111 обозначает группу людей. Эта группа состоит из разного количества людей. Количество людей, принадлежащих к этим группам, варьируется. Например, группа 111 состоит из 3 человек. В дневниках мы можем идентифицировать людей, принадлежащих к разным группам, по переменным serial
и id1
. Например, serial 111 and id1 2
означает, что наблюдение было сделано человеком номер два из группы 111. Существует также переменная Day
, которая обозначает день недели, когда проводилось наблюдение. Переменная Day
принимает значения от 1(Monday) to 7 (Sunday)
.
Если в df1
у нас есть 1 наблюдение на человека в df2
, то каждый человек должен был провести 2 наблюдения. Человек, который сделал наблюдение, может быть идентифицирован на основании serial, id1 and id2
. Id2
используется для определения различий между наблюдениями дня недели. Например, id 111, id1 3 и id2 2 можно интерпретировать как 2-дневное наблюдение, проведенное человеком № 2 из группы 111. День недели наблюдения аналогичным образом сохраняется с помощью переменной Day
.
Я хочу идентифицировать тех людей, которые записали информацию в один и тот же день в обоих дневниках. Итак, кто эти люди, которые заполнили обе записи в один и тот же день. Проблема в том, что в df2
есть 2 наблюдения, а в df1
только по одному на человека, и это затрудняет слияние.
Я слился на основе serial and id1
, но они не являются уникальными идентификаторами. Я попытался создать новую переменную и выполнить слияние на уровне «День».
Как объединить 2 набора данных на уровне дня?
library(dplyr)
df1<-df1 %>%
mutate(index = group_indices_(df1, .dots=c("serial", "id1")))
df2<-df2 %>%
mutate(index = group_indices_(df2, .dots=c("serial", "id1", "id2")))
Дата выборки:
df1
structure(list(serial = c(12, 123, 123, 10, 10), id1 = c(1, 1,
2, 1, 2), Day = c(1, 3, 2, 4, 2)), class = "data.frame", row.names = c(NA,
-5L))
df2
structure(list(serial = c(12, 12, 123, 123, 123, 123, 10, 10,
10, 10, 10, 10), id1 = c(1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3),
id2 = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2), Day = c(1, 6,
3, 7, 2, 7, 4, 7, 2, 7, 4, 7), index = c(7L, 8L, 9L, 10L,
11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L)), row.names = c(NA, -12L
), class = "data.frame")
Пример выборки данных:
serial id1 id2 Day
12 1 1 1
123 1 1 3
123 2 1 2
10 1 1 4
10 2 1 2