如何用S编程语言进行紧急医疗数据转换?

| 您将如何在R中执行此操作? (这是一个数据准备任务) 从不良事件数据集中,导出治疗紧急不良事件 事件数据集: 对于每个身体系统和首选术语,每个患者一行 要么: 该不良事件发生在基准后时期,而不是基准时期,或者 即使事件确实发生在基准期间, 基线后发生的严重性高于 基线 变量:
severity = 1 , 2 , 3 (integer code for mild moderate severe)
patid visit bodysys prefterm
Baseline rows are rows such that visit<=2
Post baseline rows are rows such that visit>2
以下是23行代码中SAS中的数据准备:
data base1_dset ;
 set ae_dset ;
 if visit<=2 ;

proc sort data=base1_dset ;
 by patid bodysys prefterm severity ;

data base2_dset ;
 set base1_dset ;
 by patid bodysys prefterm severity ;
 if last.prefterm ;

data post1_dset ;
 set ae_dset ;
 if visit> 2 ;

proc sort data=post1_dset ;
 by patid bodysys prefterm severity ;

data post2_dset ;
 set post1_dset ;
 by patid bodysys prefterm severity ;
 if last.prefterm ;
 rename severity = severity2 ;

data new_ae_dset ;
 merge base2_dset post2_dset ;
 by patid bodysys prefterm ;
 if severity2>severity or severity==. ;
这是Vilno Data Transformation中的数据准备,其中包含12行代码: (有关更多信息,请参见http://fivetimesfaster.blogspot.com)
inlist ae_dset ;
if not ( visit<=2 ) deleterow ;
select severity=max(severity) by patid bodysys prefterm ;
sendoff(base2_dset) patid bodysys prefterm severity ;

inlist ae_dset ;
if not ( visit>2 ) deleterow ;
select severity2=max(severity) by patid bodysys prefterm ;
sendoff(post2_dset) patid bodysys prefterm severity2 ;

inlist base2_dset post2_dset ;
mergeby patid bodysys prefterm ;
if not ( severity2>severity or severity is null ) deleterow ;
sendoff(new_ae_dset) patid bodysys prefterm severity2 ;
您将如何在R中执行此操作? 谢谢罗伯特 PS代码示例的格式太可怕了,为什么stackoverflow忽略了我的某些回车/换行符?     
已邀请:
这似乎或多或少地满足了您的要求(至少如果变量是数字的)。会有更好的方法
smallvisit       <- ae_dset[ ae_dset$visit <= 2, ]
bigvisit         <- ae_dset[ ae_dset$visit >  2, ]
nams             <- c(\"patid\", \"bodysys\", \"prefterm\")
smallvisitsorted <- smallvisit[ do.call( order, smallvisit[nams] ), ]
smallvisitsplit  <- split( smallvisitsorted, smallvisitsorted[nams], drop=TRUE )
last             <- function(a){ tail( a, 1 ) }
smallvisitlast   <- as.data.frame( t( sapply( smallvisitsplit, last ) ) )
mergedvisit      <- merge( bigvisit, smallvisitlast, by=nams, all.x=TRUE )
new_ae_dset      <- mergedvisit[ mergedvisit$severity.x > mergedvisit$severity.y | 
                                is.na( mergedvisit$severity.y ) , ]
例如,如果
ae_dset
看起来像
   patid bodysys prefterm visit severity
1      5       9        2     1        3
2     22       1        5     5        2
3     11       2        9     3        3
4     11       2        9     2        2
5     22       3        3     3        1
6      3       4        6     1        2
7     22       3        3     2        2
8     22       3        3     4        3
9     11       2        9     1        1
10     3       3        6     5        2
11     4       3        7     7        3
然后,使用此代码,
new_ae_dset
将看起来
  patid bodysys prefterm visit.x severity.x visit.y severity.y
1     3       3        6       5          2      NA         NA
2     4       3        7       7          3      NA         NA
3    11       2        9       3          3       1          1
4    22       1        5       5          2      NA         NA
6    22       3        3       4          3       2          2
    

要回复问题请先登录注册