Как сопоставить и объединить даты и переменные из двух разных фреймов данных в R - PullRequest
0 голосов
/ 04 февраля 2020

Я использовал R studio для этой задачи. Я провел некоторые манипуляции и в основном имею два фрейма данных: один с Site Location в качестве PRO и другой с Site Location в качестве Home. Некоторые из этих пациентов посещали оба объекта в один и тот же день, поэтому у них есть переменные для каждого.

Последний шаг, который мне нужно сделать, - это сопоставить даты (это последний столбец во фреймах данных) из «Дома» и «ПРО» для тех же пациентов, которые посетили оба сайта в один и тот же день, поэтому я можно увидеть только эти совпадающие данные для идентификатора пациента и даты. Я не хочу видеть бесподобные данные. Пожалуйста, отправьте справку.

Ниже приведена информация о двух фреймах данных, с которыми я имею дело.

Большое спасибо

   PATIENT_ID SITE_LOCATION       CREATION_DATE                IMPORT_DATE AMPEL_PARAMETER AMPEL_EXPECTED_VALUE AMPEL_EXPECTED_UNIT FEV1
1 -1234567890          HOME 07.12.2015 18:03:25 07.12.2015 18:14:11 +01:00             Fvc                    5                 [L] 4.10
2 -1234567891          HOME 08.12.2015 18:04:21 07.12.2015 18:17:32 +01:00             Fvc                    5                 [L] 4.10
3 -1234567892          HOME 09.12.2015 18:04:29 07.12.2015 18:17:32 +01:00             Fvc                    5                 [L] 4.02
4 -1234567893          HOME 10.12.2015 18:04:20 07.12.2015 18:17:32 +01:00             Fvc                    5                 [L] 3.95
5 -1234567894          HOME 11.12.2015 18:05:37 07.12.2015 18:20:16 +01:00             Fvc                    5                 [L] 3.78
6 -1234567895          HOME 12.12.2015 18:05:16 07.12.2015 18:20:16 +01:00             Fvc                    5                 [L] 3.91
  FEV1_UNIT  FVC FVC_UNIT      PEF PEF_UNIT FEF2575 FEF2575_UNIT FEV1_PREDICTED FVC_PREDICTED PEF_PREDICTED FEF2575_PREDICTED       Date
1       [L] 5.49      [L] 9.205000    [L/s]      NA      [L/min]             NA            NA            NA                NA 07.12.2015
2       [L] 5.39      [L] 8.928333    [L/s]      NA      [L/min]             NA            NA            NA                NA 08.12.2015
3       [L] 5.68      [L] 8.846667    [L/s]      NA      [L/min]             NA            NA            NA                NA 09.12.2015
4       [L] 5.61      [L] 9.268333    [L/s]      NA      [L/min]             NA            NA            NA                NA 10.12.2015
5       [L] 4.97      [L] 9.531667    [L/s]      NA      [L/min]             NA            NA            NA                NA 11.12.2015
6       [L] 5.13      [L] 9.031667    [L/s]      NA      [L/min]             NA            NA            NA                NA 12.12.2015
PATIENT_ID SITE_LOCATION       CREATION_DATE IMPORT_DATE AMPEL_PARAMETER AMPEL_EXPECTED_VALUE AMPEL_EXPECTED_UNIT     FEV1
1205 -1234567891           PRO 08.12.2015 13:11:50        <NA>            <NA>                   NA                <NA> 4.134448
1206 -1234567891           PRO 08.12.2015 13:15:27        <NA>            <NA>                   NA                <NA> 3.913590
1207 -1234567891           PRO 08.12.2015 16:04:56        <NA>            <NA>                   NA                <NA> 4.075508
1208 -1234567891           PRO 08.12.2015 16:05:39        <NA>            <NA>                   NA                <NA> 3.877134
1209 -1234567890           PRO 08.12.2015 16:56:44        <NA>            <NA>                   NA                <NA> 4.008187
1210 -1234567890           PRO 24.12.2015 17:39:45        <NA>            <NA>                   NA                <NA> 4.024912
     FEV1_UNIT      FVC FVC_UNIT       PEF PEF_UNIT  FEF2575 FEF2575_UNIT FEV1_PREDICTED FVC_PREDICTED PEF_PREDICTED FEF2575_PREDICTED
1205       [L] 5.382417      [L]  9.813333    [L/s] 176.7417      [L/min]       4.756512      5.989738       9.94095          268.4329
1206       [L] 5.429113      [L]  9.128333    [L/s] 170.7167      [L/min]       4.756512      5.989738       9.94095          268.4329
1207       [L] 5.651814      [L] 10.103333    [L/s] 181.5170      [L/min]       4.756512      5.989738       9.94095          268.4329
1208       [L] 5.640839      [L] 10.256667    [L/s] 150.9262      [L/min]       4.756512      5.989738       9.94095          268.4329
1209       [L] 5.586417      [L]  9.298333    [L/s] 175.1896      [L/min]       4.756512      5.989738       9.94095          268.4329
1210       [L] 5.617088      [L]  9.846667    [L/s] 175.6264      [L/min]       4.754849      5.988456       9.93880          268.2625
           Date     
1205 08.12.2015
1206 08.12.2015
1207 08.12.2015 
1208 08.12.2015
1209 08.12.2015 
1210 24.12.2015 

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Данные, иллюстрирующие функционирование:

set.seed(100)
df1 <- data.frame(PATIENT_ID = sample(1:10),
                 Something = sample(letters, 10), Date = paste(1:10, ".12.2015", sep = ""))
df2 <- data.frame(PATIENT_ID = c(6,4,2,3),
                 Something = sample(letters, 4),
                 Date = c("1.12.2015", "1.12.2015", "21.12.2015", "2.12.2015"))

df1
#    PATIENT_ID Something       Date
# 1           4         q  1.12.2015
# 2           3         w  2.12.2015
# 3           5         g  3.12.2015
# 4           1         j  4.12.2015
# 5           9         z  5.12.2015
# 6           6         o  6.12.2015
# 7          10         e  7.12.2015
# 8           2         x  8.12.2015
# 9           8         s  9.12.2015
# 10          7         l 10.12.2015

df2
#   PATIENT_ID Something       Date
# 1          6         n  1.12.2015
# 2          4         r  1.12.2015
# 3          2         m 21.12.2015
# 4          3         y  2.12.2015

Таким образом, пациенты с ID 4 и 3 должны быть сохранены вместе со всеми их данными:

dfMatched <- merge(x = df1, y = df2, by = c("PATIENT_ID", "Date"),
                   all.x = FALSE, all = FALSE)

dfMatched
#   PATIENT_ID      Date Something.x Something.y
# 1          3 2.12.2015           w           y
# 2          4 1.12.2015           q           r
0 голосов
/ 04 февраля 2020

Ниже приведено решение с использованием inner_join. Это должно дать вам то, что вы хотели, если я правильно понял запрос - это всего лишь строки из homedf, где есть совпадение из PROdf.

library(tidyr)
library(dplyr)
homedf<- homedf %>% mutate(dateonly=as.Date(CREATION_DATE))
PROdf<- PROdf %>% mutate(dateonly=as.Date(CREATION_DATE))
mathceddf<-inner_join(homedf,PROdf,by=c("PATIENT_ID","dateonly"))
...