问题描述
我正在尝试合并两个都是长格式的纵向数据。
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
我如何编辑上面的代码以通过患者 ID 和访问变量进行合并?
我试过了:
library (dplyr)
data_combined <- full_join(x=df1,by="patientid","visit")
所需的加入/合并数据帧:
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
连接函数将通过所有变量进行连接。在您的数据中,这两个变量是 patientid
和 visit
。因此,对于您提供的示例数据,以下简化代码应该有效:
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()
的另一个可能参数。