Я пытаюсь создать набор данных, аналогичный тому, как CMS публикует referral data. Короче говоря, два врача связаны, если они видят одного и того же пациента в течение 30 дней после другого.Идентификация пар строк в dataframe, где даты указаны в пределах указанного количества дней
У меня есть набор данных, который содержит пациент, врач и дату назначения, например:
df <- data.frame(
doctor = c("Dr. Who", "Dr. Pepper", "Dr.Bob", "Dr. Strangelove"),
patient = c("Mickey", "Mickey", "Mickey", "Mickey"),
date = c("2015-01-15", "2015-01-21", "2015-04-01", "2015-02-18")
)
С выше набором данными, я хотел бы написать некоторый R код возврата будет:
- Доктор Кто, доктор Пеппер (потому что они видят Микки в течение 6 дней друг с другом)
- Dr. Pepper, Dr. Strangelove (они видят Микки в течение 28 дней друг от друга)
В моем фактическом наборе данных есть еще много врачей, пациентов и дат. У меня нет большого опыта в области компьютерных наук, но это похоже на то, что это будет задача, связанная с вычислением.
На простом английском языке, как я бы обрабатывать эту проблему:
- Соберите все назначения пациента
- Для каждой даты назначения, найти разницу в днях от всех остальных дней назначения
- Верните пары врачей для любых двух встреч, которые составляют +/- 30 дней друг от друга.
Пожалуйста, дайте мне знать, если я могу улучшить свой вопрос в любом случае. Благодарю.
Спасибо! Я думаю, мне нужно вернуться к старому коду и посмотреть, где еще я могу использовать mapply. Мне любопытно - есть ли еще одна строка кода, которую вы использовали для изменения даты df $ в соответствующий класс, который будет работать с решением, которое вы дали? Я должен был сделать что-то вроде: 'df $ date <-parse_date_time (df $ date,"% y% m% d ") df $ linked_doc <- mapply ( function (doc, date) {paste ( df [ abs (date - df $ date) <2592000 & doc! = df $ doctor, 'doctor'], collapse = ',')}, df $ doctor, df $ date) 'где 2592000 - 30 дней в секундах. Когда я попытался использовать difftime (..), я получил ошибки типа var – MCharles
Извините, я должен был включить это! Вам нужен формат даты, а не дата-время. В этом случае вам нужно только 'df $ date <- as.Date (df $ date)'. Поскольку ваши даты уже в формате ISO, вам даже не нужно передавать ему строку синтаксического анализа! – alistaire
Связанный вопрос - как бы вы шли на расщепление на пациента в первую очередь? Является ли это вопросом гнездования карполя внутри? – MCharles