Я хочу сопоставить два кадра данных разных измерений (df1 и df2) на основе столбца «Индекс».Затем добавьте два столбца из df2 (shift & shiftdate) в df1 в зависимости от совпадения.Но у меня есть несколько правил, которым я должен следовать.
df1 <- data.frame("Index" = c("Adams10-1", "Adams10-1", "Adams10-2", "Adams10-2", "Ball10-1", "Ball10-2", "Cash10-1", "Cash10-2", "David10-1", "David10-2"),
"CaseDate" = c("2005-10-01", "2005-10-01", "2005-10-02", "2005-10-02", "2005-10-01", "2005-10-02", "2005-10-01", "2005-10-02", "2005-10-01", "2005-10-02"),
"Type" = c("heart", "local", "knee", "nose", "heart", "foot", "shin", "foot", "spine", "delivery"),
"StartTime" = c(1640, 1755, 0112, 0300, 2145, 0233, 2123, 0326, 858, 1024))
df2 <- data.frame("Index" = c("Adams10-1", "Adams10-1", "Ball10-1", "Cash10-1", "David10-1", "David10-1", "David10-3"),
"ShiftDate" = c("2005-10-01", "2005-10-01", "2005-10-01", "2005-10-01", "2005-10-01", "2005-10-01", "2005-10-03"),
"Shift" = c("OB", "CV", "Night", "Super", "OB", "Day", "OB"),
"Multiple" = c("yes", "yes", "no", "no", "yes", "yes", "no"))
Правила:
Если есть совпадение между индексом df1 $ и индексом df2 $ И:
если df2 $ Multiple == "нет", то добавьте df2 $ Shift и df2 $ ShiftDate к df1
, если df2 $ Multiple == "да ", затем введите NA (UNLESS df1 $ Type ==" heart "& df2 $ Shift ==" CV "(в этом случае добавьте сдвиг CV и дату перехода от df2 к df1))
Если нет совпадения между индексом df1 $ и индексом df2 $, укажите NA
UNLESS df1 $ StartTime> 0000 и <0700 (в этом случаедобавьте df2 $ shift и df2 $ shiftdate от df2 $ shiftdate, то есть за один день до df1 $ CaseDate) </p>
UNLESS df1 $ Type == "delivery" & df2 $ Shift = "OB"(в этом случае добавьте df2 $ shift и df2 $ shiftdate от df2 $ shiftdate, которая является одним днем после df1 $ CaseDate)
Я хочу получить результатыниже.
df3 <- data.frame("Index" = c("Adams10-1", "Adams10-1", "Adams10-2", "Adams10-2", "Ball10-1", "Ball10-2", "Cash10-1", "Cash10-2", "David10-1", "David10-2"),
"CaseDate" = c("2005-10-01", "2005-10-01", "2005-10-02", "2005-10-02", "2005-10-01", "2005-10-02", "2005-10-01", "2005-10-02", "2005-10-01", "2005-10-02"),
"Type" = c("heart", "local", "knee", "nose", "heart", "foot", "shin", "foot", "spine", "delivery"),
"StartTime" = c(1640, 1755, 0112, 0300, 2145, 0233, 2123, 0326, 858, 1024),
"Shift" = c("CV", NA, NA, NA, "Night", "Night", "Super", "Super", NA, "OB"),
"ShiftDate" = c("2005-10-01", NA, NA, NA, "2005-10-01", "2005-10-01", "2005-10-01", "2005-10-01", NA, "2005-10-03"))
Даже если я не могу сделать это на основе всехСами правила, просто получить помощь с соответствием будет полезно.Заранее спасибо!