R中是否存在用另一个数据帧中的相关值替换一个数据帧中的值的方法?

时间:2019-11-04 19:28:25

标签: r merge

我需要用另一个数据帧中的值替换一个数据帧中的值。我正在尝试找到最简单的方法,但是我可能会考虑过度。

以下是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中的值

1 个答案:

答案 0 :(得分:1)

我不确定预期的输出。如果您想将run_once: True 1st_booking的{​​{1}}和2nd_bookingorder_cutoff匹配,我们可以使用{{1} }匹配相应的列,然后再次获取宽格式的数据。

article

如果您只想按日期而不是seasonleft_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