我已使SAS脚本正常工作:
data dt;
input usubjid trt $ dt;
datalines;
1 P 1
1 P 2
1 P 3
1 P 4
1 O 5
1 O 6
1 O 7
1 P 8
1 P 9
1 P 10
2 P 21
2 P 22
2 P 23
2 P 24
2 O 25
2 O 26
2 O 27
2 P 28
2 P 29
2 P 30
;
proc sort data=dt;by usubjid dt trt;run;
data dt2;
set dt;
by usubjid trt notsorted;
if first.trt or last.trt then output;
run;
此脚本选择治疗组的第一行和最后一行。请注意,在同一患者中,治疗组可以在其他治疗之后重复。
结果是:
不知道如何在R中使用 tibblegroup_by和slice来做同样的事情。
拟定重复SAS输出的R数据:
library(tidyverse)
tribble(
~usubjid, ~trt, ~dt,
1, "P", 1,
1, "P", 2,
1, "P", 3,
1, "P", 4,
1, "O", 5,
1, "O", 6,
1, "O", 7,
1, "P", 8,
1, "P", 9,
1, "P", 10,
2, "P", 21,
2, "P", 22,
2, "P", 23,
2, "P", 24,
2, "O", 25,
2, "O", 26,
2, "O", 27,
2, "P", 28,
2, "P", 29,
2, "P", 30
) -> dt
非常感谢!
1条答案
按热度按时间gab6jxml1#
基于
consecutive
值创建新组,然后基于filter
。默认情况下,group_by
按相同值分组(即使它们不连续)。如果您没有dplyr 1.1.0,可以使用data.table::rleid
代替consecutive_id
: