назначить dataset2 набору данных 1 на основе идентификатора по условиям-R

#r

#r

Вопрос:

У меня есть 2 набора данных, и я пытаюсь назначить dataset2 набору данных 1 на основе идентификатора dataset1:

     ID <- c(11,17,23,45,48)
    joined <- c("2020-04-19","2020-04-25","2020-04-22","2020-04-14","2020-04-05")
    transfer <- c("2020-05-19"," ","2020-05-22"," ","2020-05-05")
    promotion <- c("2020-06-09","2020-06-15"," ","2020-06-04","2020-06-25")
    df <- data.frame(ID, joined, transfer, promotion)

dataset2:    
    ID <- c(11,11,11,11,17,17,17,23,23,45,45,48)
    files_submtted  <- c("true","false","true"," ","true","true","false","true"," ","true","false","true")
    task_completed <- c("false","false ","true","true ","true","true","false","true"," ","true","false","true")
    multi_tasking <- c("false","true","false","true","false","true","false","true"," ","true","false","true")
    Date <- c("2020-04-19", "2020-05-19", "2020-06-09","2020-04-25","2020-06-15","2020-04-22", "2020-05-22","2020-04-14","2020-06-04","2020-04-05", "2020-05-05", "2020-06-25")
    df2 <- data.frame(ID, files_submtted, task_completed, multi_tasking, Date)
  

ожидаемый результат
ВЫВОД:

     ID files_submtted task_completed multi_tasking       Date    output
    11           true          false         false 2020-04-19    joined  
    11          false         false           true 2020-05-19  transfer
    11           true           true         false 2020-06-09 promotion
    11                         true           true 2020-04-25    
    17           true           true         false 2020-06-15 promotion
    17           true           true          true 2020-04-22    
    17          false          false         false 2020-05-22  
    23           true           true          true 2020-04-14    
    23                                             2020-06-04 
    45           true           true          true 2020-04-05    
    45          false          false         false 2020-05-05  
    48           true           true          true 2020-06-25 promotion
  

Комментарии:

1. Вам нужно будет расширить свою логику. Например, идентификатор 17 заканчивается строкой «передача» оригиналом df , в которой ничего нет.

2. @r2evans Я отредактировал свой вывод, не могли бы вы помочь в этом

3. Я все еще в замешательстве. Идентификатор 17 имеет значение «joined», равное 04-25 df , но на выходе нет значения «joined» (вероятно, потому, что его нет 2020-04-25 df2 . Я подозреваю, что это операция слияния / объединения, но неясно, зависит ли она буквально от точных значений ID и Date , или если происходит логика «в пределах диапазона».

4. @ r2evans Я пытаюсь присвоить значение на основе другого набора данных

5. Хорошо. Я предположил, что совпадение было основано на «ID» и «Date», но ваш ожидаемый результат не соответствует этому. Можете ли вы проверить, какова ваша ожидаемая логика?

Ответ №1:

 library(dplyr)
library(tidyr) # pivot_longer
tidyr::pivot_longer(df, -ID, values_to = "Date") %>%
  left_join(df2, ., by = c("ID", "Date"))
#    ID files_submtted task_completed multi_tasking       Date      name
# 1  11           true          false         false 2020-04-19    joined
# 2  11          false         false           true 2020-05-19  transfer
# 3  11           true           true         false 2020-06-09 promotion
# 4  11                         true           true 2020-04-25      <NA>
# 5  17           true           true         false 2020-06-15 promotion
# 6  17           true           true          true 2020-04-22      <NA>
# 7  17          false          false         false 2020-05-22      <NA>
# 8  23           true           true          true 2020-04-14      <NA>
# 9  23                                             2020-06-04      <NA>
# 10 45           true           true          true 2020-04-05      <NA>
# 11 45          false          false         false 2020-05-05      <NA>
# 12 48           true           true          true 2020-06-25 promotion
  

Комментарии:

1. прия, это отвечает на твой вопрос?