1

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

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

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

当我尝试使用 2 列合并并查看数据框“持续时间”时,表为空且没有值,只有列标题。它说“表中没有可用数据”。

我的任务是在 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 排序。

4

1 回答 1

1

根据 SAS 文档Combining SAS Data Sets,并由 SAS 大师 @Tom 在上面的评论中确认,setwithby仅表示您正在交错数据集。不merge(顺便说一句,这也是您不使用的 SAS 方法)正在发生:

交错使用 SET 语句和 BY 语句将多个数据集组合成一个新数据集。新数据集中的观测数是来自原始数据集的观测数之和。但是,新数据集中的观测值按一个或多个 BY 变量的值排列,并且在每个 BY 组内,按它们出现的数据集的顺序排列。您可以使用 BY 变量或使用索引来交错数据集。

因此, R中setwithout的最佳翻译是,而with是+ (在行上):byrbind()setbyrbindorder

duration <- rbind(pop, combined1)                                # STACK DFs
duration <- with(duration, duration[order(usubjid, trtag2n),])   # ORDER ROWS

但是,请注意:rbind不允许连接的数据集之间存在不匹配的列。但是,第三方包允许不匹配的列,包括:plyr::rbind.fill, dplyr::bind_rows, data.table::rbindlist.

于 2019-07-09T21:46:38.943 回答