這是我的兩個資料集:
data1 = data.frame (id =c(1,1,1,1,1,1,1,1,1),
drug = c( "drug1", "drug1", "drug2", "drug3", "drug4", "drug4", "drug5", "drug6", "drug7"),
date_tx=c("2014-01-21","2015-04-01","2016-03-15","2013-01-13","2014-01-02","2017-04-05","2021-07-22","2022-03-01","2016-01-28"))
data2 = data.frame (id =c(1,1,1,1,1,1,1,1,1,1),
drug = c( "drug1", "drug1", "drug2", "drug3", "drug4", "drug4", "drug5", "drug6", "drug7", "drug8"),
date_plan=c("2014-01-23","2015-04-01","2016-03-15","2013-03-01","2014-01-02","2017-04-05","2021-07-24","2022-03-01","2016-01-20","2016-05-05"))
我想使用 id、drug 和兩個日期(date_tx 和 date_plan)進行完全連接。即使我使用日期來進行連接,我也想保留兩列。因為在兩個日期不匹配的情況下(即前兩個日期),我希望在各自的列中有兩行不同的日期。
我希望得到的是以下內容:
output = data.frame (id =c(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
drug = c( "drug1", "drug1", "drug1", "drug2", "drug3", "drug3", "drug4", "drug4", "drug5", "drug5", "drug6", "drug7", "drug7", "drug8"),
date_tx=c("2014-01-21","2015-04-01",NA, "2016-03-15","2013-01-13", NA, "2014-01-02","2017-04-05","2021-07-22", NA, "2022-03-01","2016-01-28",NA,NA),
date_plan=c(NA,"2015-04-01","2014-01-23","2016-03-15", NA, "2013-03-01","2014-01-02","2017-04-05", NA, "2021-07-24", "2022-03-01", NA, "2016-01-20","2016-05-05"))
我已經嘗試過。下面確實給了我行數,但是對于那些不匹配的行,我需要能夠區分它來自哪個 date_column。
merge <- full_join(data1, data2, by=c("id"="id", "drug"="drug", "date_tx"="date_plan"))
任何幫助,將不勝感激!!
uj5u.com熱心網友回復:
您可以嘗試使用powerjoin@moodymudskipper 提供的包。您可以進行完全連接并指示keep = "both"保留您感興趣的兩列。帶有 coalesce的conflict引數將從 2 個 data.frames 中決議相同的列名。我在最后添加了arrangeand select,因此最終結果將與output帖子中的相同。
library(powerjoin)
power_full_join(
data1,
data2,
by = c("id", "drug", "date_tx" = "date_plan"),
keep = "both",
conflict = coalesce_xy
) %>%
arrange(id, drug) %>%
select(id, drug, date_tx, date_plan)
輸出
id drug date_tx date_plan
1 1 drug1 2014-01-21 <NA>
2 1 drug1 2015-04-01 2015-04-01
3 1 drug1 <NA> 2014-01-23
4 1 drug2 2016-03-15 2016-03-15
5 1 drug3 2013-01-13 <NA>
6 1 drug3 <NA> 2013-03-01
7 1 drug4 2014-01-02 2014-01-02
8 1 drug4 2017-04-05 2017-04-05
9 1 drug5 2021-07-22 <NA>
10 1 drug5 <NA> 2021-07-24
11 1 drug6 2022-03-01 2022-03-01
12 1 drug7 2016-01-28 <NA>
13 1 drug7 <NA> 2016-01-20
14 1 drug8 <NA> 2016-05-05
uj5u.com熱心網友回復:
在每個資料框中創建日期列的副本以進行合并date_merge是否會為您提供所需的結果?
data1 %>%
mutate(date_merge = date_tx) %>%
full_join(data2 %>%
mutate(date_merge = date_plan),
by=c("id", "drug", "date_merge")) %>%
select(-date_merge) %>%
arrange(id, drug)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480137.html
