Merge/join 基于两个变量的纵向数据

Merge/join longitudinal data based on two variables

我正在尝试合并两个都是长格式的纵向数据。

df1:
patientid visit mental-health
703-FD    1     depressed
703-FD    2     depressed
703-FD    3     depressed
707-NM    1     non-depressed
707-NM    2     non-depressed
707-NM    3     depressed 

df2:
patientid visit HIV_disclosure 
703-FD    1     yes
703-FD    2     yes
703-FD    3     yes
707-NM    1     no
707-NM    2     no
707-NM    3     yes

我试过的代码:

data_combined <- full_join(x=df1, y=df2, by="patientid"): 

patientid visit.x mental-health  visit.y   HIV disclosure
703-FD    1       depressed      1         yes
703-FD    1       depressed      2         yes
703-FD    1       depressed      3         yes
703-FD    2       depressed      1         yes
703-FD    2       depressed      2         yes
703-FD    2       depressed      3         yes
703-FD    3       depressed      1         yes
703-FD    3       depressed      2         yes
703-FD    3       depressed      3         yes
707-NM    1     non-depressed    1         no
707-NM    1     non-depressed    2         no
707-NM    1     non-depressed    3         yes
707-NM    2     non-depressed    1         no
707-NM    2     non-depressed    2         no
707-NM    2     non-depressed    3         yes
707-NM    3     depressed        1         no
707-NM    3     depressed        2         no
707-NM    3     depressed        3         yes

如何编辑以上代码以同时按 patientid 和 visit 变量合并?

我试过:

library (dplyr)
data_combined <- full_join(x=df1, y=df2, by="patientid", "visit")

所需的joined/merged数据帧:

patientid visit  mental-health  HIV disclosure
703-FD    1       depressed         yes
703-FD    2       depressed         yes
703-FD    3       depressed         yes
707-NM    1     non-depressed       no
707-NM    2     non-depressed       no
707-NM    3       depressed         yes

我确定这是一个简单的代码,但我已经为此苦苦挣扎了一段时间;请协助。

默认情况下,dplyr 连接函数将连接所有共有的变量。在您的数据中,这两个变量是 patientidvisit。因此,对于您提供的示例数据,以下简化代码应该有效:

library(dplyr)
data_combined <- full_join(x=df1, y=df2)

如果你想指定两列(也许有更多列是共同的),那么你需要为by = 参数提供一个向量。

data_combined <- full_join(x=df1, y=df2, by = c("patientid", "visit"))

您的原始代码仅提供 by = 'patientid'。由于 'visit' 在逗号之后,full_join() 会尝试将 'visit' 应用于 full_join().

的另一个可能参数