我需要用另一个数据帧中的值替换一个数据帧中的值。我正在尝试找到最简单的方法,但是我可能会考虑过度。
以下是DF1中的数据示例:
season article 1st_booking 2nd_booking
SS20 EF0647 2019-06-25 2019-07-09
SS20 059611 2019-07-30 2019-08-13
SS20 EG3208 2019-10-29 <NA>
SS20 EF9348 2019-10-29 2019-11-12
SS20 EE4609 2019-08-27 2019-10-29
SS20 EF7610 2019-09-24 2019-10-29
SS20 EH1307 2019-09-24 2019-10-29
SS20 EH1308 2019-09-24 2019-10-29
SS20 EH1309 2019-09-24 2019-10-29
SS20 EH1310 2019-09-24 2019-10-29
从DF2:
season article order_cutoff booking_deadline
SS20 EF0647 2019-06-25 2019-06-07
SS20 EF0647 2019-07-09 2019-06-07
SS20 EF0647 2019-12-10 2019-11-08
SS20 059611 2019-07-30 2019-07-12
SS20 059611 2019-08-13 2019-07-12
SS20 059611 2019-10-08 2019-09-06
SS20 EG3208 2019-10-29 2019-10-11
SS20 EF9348 2019-10-29 2019-10-11
SS20 EF9348 2019-11-12 2019-10-11
SS20 EF9348 2019-11-26 2019-11-08
请注意,来自DF1的第一预订和第二预订在DF2中称为“ order_cutoff”。我想在DF1中进行操作,将DF2中相关的booking_deadline替换为1st_booking和2nd_booking列中的值。试图进行合并,但我不想创建新列-只需将DF1中的值替换为DF2中的值
答案 0 :(得分:1)
我不确定预期的输出。如果您想将run_once: True
和1st_booking
的{{1}}和2nd_booking
与order_cutoff
匹配,我们可以使用{{1} }匹配相应的列,然后再次获取宽格式的数据。
article
如果您只想按日期而不是season
和left_join
合并,则可以使用library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = ends_with("booking")) %>%
left_join(df2, by = c('season' = 'season', 'article' = 'article',
'value' = 'order_cutoff')) %>%
select(-value) %>%
pivot_wider(names_from = name, values_from = booking_deadline)
# A tibble: 10 x 4
# season article `1st_booking` `2nd_booking`
# <fct> <chr> <fct> <fct>
# 1 SS20 EF0647 2019-06-07 2019-06-07
# 2 SS20 059611 2019-07-12 2019-07-12
# 3 SS20 EG3208 2019-10-11 NA
# 4 SS20 EF9348 2019-10-11 2019-10-11
# 5 SS20 EE4609 NA NA
# 6 SS20 EF7610 NA NA
# 7 SS20 EH1307 NA NA
# 8 SS20 EH1308 NA NA
# 9 SS20 EH1309 NA NA
#10 SS20 EH1310 NA NA
season
数据
article