我正在基于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进行排序。
答案 0 :(得分:0)
根据SAS文档Combining SAS Data Sets,并由SAS负责人@Tom确认,在上面的注释中,set
与by
仅表示您要对数据集进行交织。没有发生merge
(顺便说一句,这也是您不使用的SAS方法):
交织使用SET语句和BY语句进行组合 将多个数据集合并为一个新数据集。观察数 在新数据集中,是来自 原始数据集。但是,新数据集中的观察结果是 由一个或多个BY变量的值排列,以及 每个BY组,按出现它们的数据集的顺序排列。您 可以通过使用BY变量或通过使用 索引。
因此,R中没有set
的{{1}}的最佳翻译是by
,带有rbind()
的{{1}}是set
+ {{ 1}}(在行上):
by
但是,请注意:rbind
不允许串联的数据集之间存在不匹配的列。但是,第三方软件包允许使用不匹配的列,包括:order
,duration <- rbind(pop, combined1) # STACK DFs
duration <- with(duration, duration[order(usubjid, trtag2n),]) # ORDER ROWS
,rbind
。