如何基于2列在R上合并2个数据帧?

时间:2019-07-09 21:01:42

标签: r dataframe merge sas merging-data

我正在基于R中的2列合并2个数据帧。这两个数据帧称为popr和drop column,它们共享相同的2个变量:USUBJID和TRTAG2N,分别是我要合并两个数据帧的变量。

当我仅尝试基于某一列进行合并时,合并功能将起作用:

merged <- merge(popr,droppedcol,by="USUBJID")

当我尝试使用2列进行合并并查看数据帧“ Duration”时,表为空,没有值,只有列标题。它说“表中没有可用数据”。

我的任务是在R中为此复制SAS代码:

data duration;
  set pop combined1 ;
  by usubjid trtag2n;
run;

在R上,我尝试了以下

duration<- merge(popr,droppedcol,by.x="USUBJID","TRTAG2N",by.y="USUBJID","TRTAG2N")

duration <- merge(popr,droppedcol,by.x="USUBJID","TRTAG2N",by.y="USUBJID","TRTAG2N")

duration <- full_join(popr,droppedcol,by = c("USUBJID","TRTAG2N"))

duration <- merge(popr,droppedcol,by = c("USUBJID","TRTAG2N"))

我希望看到一个数据列,其中包含USUBJID,TRTAG2N,TRTAG2和FUDURAG2列,并按FUDURAG2和USUBJID进行排序。

1 个答案:

答案 0 :(得分:0)

根据SAS文档Combining SAS Data Sets,并由SAS负责人@Tom确认,在上面的注释中,setby仅表示您要对数据集进行交织。没有发生merge(顺便说一句,这也是您不使用的SAS方法):

  

交织使用SET语句和BY语句进行组合   将多个数据集合并为一个新数据集。观察数   在新数据集中,是来自   原始数据集。但是,新数据集中的观察结果是   由一个或多个BY变量的值排列,以及   每个BY组,按出现它们的数据集的顺序排列。您   可以通过使用BY变量或通过使用   索引。

因此,R中没有set的{​​{1}}的最佳翻译是by,带有rbind()的{​​{1}}是set + {{ 1}}(在行上):

by

但是,请注意:rbind不允许串联的数据集之间存在不匹配的列。但是,第三方软件包允许使用不匹配的列,包括:orderduration <- rbind(pop, combined1) # STACK DFs duration <- with(duration, duration[order(usubjid, trtag2n),]) # ORDER ROWS rbind