问题描述
|
您将如何在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