передать переменные из другого фрейма данных в операторе case_when с dplyr в R - PullRequest
0 голосов
/ 08 мая 2018

df1 и df2 - это два отдельных фрейма данных, полученных из других логик.

данные испытаний:

df1 <- data.frame(type= c("invite","reminder", "final"))

df2 <- data.frame(delivery_date = date('2018-05-07'))

Вопрос: Как я могу передать значения переменной из df2 в df1 (как я могу заставить этот код работать?)

#pseudocode: 

library(dplyr)
library(lubridate)

test_d<- df1 %>%
   mutate(send_date = case_when(
          type == "invite" ~ df2$delivery_date
          type == "reminder"  ~ df2$delivery_date + days(2)
          type == "final"  ~  df2$delivery_date + days(4) 
          )
)

фрейм данных, который я хочу:

type       send_date
invite    2018-05-07   #pass the value of delivery_date from df1 
reminder  2018-05-09   #add 2 days based on the value of delivery_date in df1
final     2018-05-11   #add 4 days based on the value of delivery_date in df1

1 Ответ

0 голосов
/ 08 мая 2018

Я изменил ваш код следующим образом. Обратите внимание, что я использовал функцию data_frame, чтобы избежать создания столбцов факторов. Мне проще работать с одним фреймом данных, поэтому я использовал left_join, чтобы сначала объединить два фрейма данных. После этого я использовал функцию first в вызове case_when, чтобы убедиться, что используется только один номер. df3 - конечный результат.

library(dplyr)
library(lubridate)

df1 <- data_frame(type= c("invite","reminder", "final"))

df2 <- data_frame(delivery_date = date('2018-05-07'))

df3 <- df1 %>%
  left_join(df2 %>% mutate(type = "invite"), by = "type") %>%
  mutate(delivery_date = case_when(
    type %in% "invite"    ~ first(delivery_date),
    type %in% "reminder"  ~ first(delivery_date) + days(2),
    type %in% "final"     ~ first(delivery_date) + days(4) 
  )) %>%
  rename(send_date = delivery_date)

df3
# # A tibble: 3 x 2
#   type     send_date 
#   <chr>    <date>    
# 1 invite   2018-05-07
# 2 reminder 2018-05-09
# 3 final    2018-05-11
...