#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. прия, это отвечает на твой вопрос?