У меня есть два кадра данных, где один представляет собой когорту, в которой каждое наблюдение представляет собой одного человека, а другое - реестр посещений, причем каждое наблюдение представляет собой посещение.
Мне необходимо изучить детали каждого посещения (количество посещений по определенной c причине, времени для первого посещения), но не может понять, как этого добиться.
Каждый человек в первом кадре данных имеет уникальный идентификатор, который также можно найти во втором кадре данных (но каждый идентификатор может встречаться несколько раз во втором фрейме данных).
df1 <- data.frame(id = 1:5)
df2 <- data.frame(id = c(1,2,3,3,3,4,5,5),
date = as.Date("2017-01-01") + 10*0:7
reason = c("A B C", "A E", "E F", "A D F","D","F A","B","D A"),
stringsAsFactors = TRUE)
В связи с этим возникает другая проблема, заключающаяся в том, что для каждого посещения может быть несколько причин, и они разделяются пробелом.
Я попытался найти решения для достижения этой цели и подумать, что я мог бы создать новые переменные в первом кадре данных, которые будут сгенерированы из данных во втором кадре данных, чтобы иметь всю информацию, необходимую для анализа в одном и том же кадре данных, и затем сделайте мой анализ.
Быть довольно новым для RI не было Я могу понять, как это сделать. Это разумный способ go о проблеме? Как это можно сделать?
Мне удалось успешно отфильтровать строки по интересующим меня причинам, а затем соединить два кадра данных.
combined <- df2 %>%
filter(str_detect(reason,"B|E")) %>%
distinct(id, .keep_all = TRUE %>%
right_join(df1)
Теперь у меня есть дата и причина для контакта для первого посещения по любой из причин, которые меня интересуют. Я также хотел бы иметь новую переменную с числом посещений по любой из причин, которые я ищу. То есть подсчитайте строки, где причина = A и / или E (например).
Я бы хотел, чтобы результат был примерно таким:
id firstdate reasons visits
1 2017-01-01 A B C 1
Которого мне удалось достичь с:
df2 %>%
filter(str_detect(reason,"A|E")) %>%
group_by(id) %>%
tally(name="visits")
```