R语言 使用sql合并2个数据集?

xdyibdwo  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(165)

我正在做一个数据集上的数据管理来训练我自己。我有两个表,第一个被称为"Suivi"和第二个"Treatement",我想合并接下来的两个表的方式得到第三个。
随附表格:
| 后续_id|成员标识|鼻炎_症状|药物标识1|药物标识2|药物标识3|药物标识4|药物标识5|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星3357195|小行星85763|五十一||||||
| 小行星3357665|小行星87339|八个||||||
| 小行星3358237|小行星87343|十七||||||
| 小行星335|八七三四五|二十六||||||
| 小行星335|小行星87343|无||||||
| 小行星3359371|小行星87343|无||||||
| 小行星336|小行星87343|三十||||||
| 小行星336|八七三四五|四个||||||
| 小行星336|小行星87343|无||||||
| 小行星336|小行星87505|六十四||||||
治疗:
| 治疗ID|suivi_数据_标识|药物标识|
| - ------|- ------|- ------|
| 小行星927231|小行星3357195|小行星7501|
| 小行星927765|小行星3357665|小行星7489|
| 小行星928423|小行星3358237|小行星7489|
| 小行星928425|小行星3358237|小行星7501|
| 小行星928427|小行星3358237|小行星7623|
| 小行星928539|小行星335|小行星7489|
| 小行星929173|小行星335|小行星7489|
| 小行星929741|小行星3359371|小行星7489|
| 小行星93|小行星336|小行星7489|
| 小行星932937|小行星336|小行星7489|
| 小行星933381|小行星336|小行星7569|
| 小行星933383|小行星336|小行星7645|
| 小行星933385|小行星336|小行星7789|
| 小行星933387|小行星336|小行星19159|
| 小行星933393|小行星336|小行星7569|
| 小行星933395|小行星336|小行星7605|
| 小行星933397|小行星336|小行星7645|
| 小行星933399|小行星336|小行星7789|
| 小行星933401|小行星336|小行星19159|
需要的表:
| 后续_id|成员标识|鼻炎_症状|药物标识1|药物标识2|药物标识3|药物标识4|药物标识5|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 小行星3357195|小行星85763|五十一|小行星7501|||||
| 小行星3357665|小行星87339|八个|小行星7489|||||
| 小行星3358237|小行星87343|十七|小行星7489|小行星7501|小行星7623|||
| 小行星335|八七三四五|二十六|小行星7489|||||
| 小行星335|小行星87343|无|小行星7489|||||
| 小行星3359371|小行星87343|无|小行星7489|||||
| 小行星336|小行星87343|三十|小行星7489|||||
| 小行星336|八七三四五|四个|小行星7489|||||
| 小行星336|小行星87343|无|小行星7569|小行星7645|小行星7789|小行星19159||
| 小行星336|小行星87505|六十四|小行星7569|小行星7605|小行星7645|小行星7789|小行星19159|
有没有办法用sql(在access中?!)或者用R或python做一个函数来完成。
先谢了

utugiqy6

utugiqy61#

你要找的是一个连接。
比如:

SELECT suivi.Suivi_id, suivi.member_id, treatment.medicin_id ...
FROM suivi
JOIN treatment ON suivi.Suivi_id = treatment.suivi_data_id
vxf3dgd4

vxf3dgd42#

我知道有两种方法。要么使用Pivot函数(https://learn.microsoft.com/de-de/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16),要么使用mssql中的ROW_NUMMBER()函数对数据进行排序。(其他数据库应该有类似的函数。)也可以编写一些动态的东西,但这里是staitc版本:

WITH TreatementRowNumber as (
SELECT 
ROW_NUMBER() OVER (PARTITION BY [suivi_data_id]  ORDER BY [suivi_data_id])     RowNumber
, suivi_data_id
, medicin_id
FROM Treatement

)

Select
[Suivi_id]
, [member_id]
, [rhinitis_symptoms]
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 1) medicin_id1
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 2) medicin_id2
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 3) medicin_id3
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 4) medicin_id4
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 5) medicin_id5
 
FROM Suivi
iq0todco

iq0todco3#

使用Pandas的Python解决方案:
在这里,我使用pandas merge function来连接两个表,即Suivi_TableTreatment_Table。接下来,为了识别两个表Renaming的类似列suivi_data_idSuivi_id,。接下来提到我想从治疗表中选择的[[]]中的列名。

import pandas as pd
pd.merge(Suivi_Table, Treatment_Table.rename(columns = {'suivi_data_id':'Suivi_id'})[['Suivi_id','medicin_id']], on="Suivi_id")
bsxbgnwa

bsxbgnwa4#

然而,根据你想如何合并它们,你最好使用完全连接。假设你有suivi_id和suivi_data_id,我会使用它们来连接,你应该希望最终得到每条记录的每个治疗ID:

SELECT *
FROM suivi as s
FULL OUTER JOIN treatment as t ON s.Suivi_id = t.suivi_data_id

相关问题