R tibble group_by切片,无法重复SAS结果

vwhgwdsa  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(136)

我已使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_byslice来做同样的事情。
拟定重复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

非常感谢!

gab6jxml

gab6jxml1#

基于consecutive值创建新组,然后基于filter。默认情况下,group_by按相同值分组(即使它们不连续)。如果您没有dplyr 1.1.0,可以使用data.table::rleid代替consecutive_id

library(dplyr) #1.1.0 and above
dt %>% 
  group_by(usubjid, cons_trt = consecutive_id(trt)) %>% 
  filter(row_number() %in% c(1, n()))

   usubjid trt      dt cons_trt
     <dbl> <chr> <dbl>    <int>
 1       1 P         1        1
 2       1 P         4        1
 3       1 O         5        2
 4       1 O         7        2
 5       1 P         8        3
 6       1 P        10        3
 7       2 P        21        3
 8       2 P        24        3
 9       2 O        25        4
10       2 O        27        4
11       2 P        28        5
12       2 P        30        5

相关问题