您将如何在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下面是SAS中的数据准备,共23行代码:
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数据转换中的数据准备,共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代码示例的格式是可怕的,为什么堆栈溢出忽略了一些返回/换行符?
发布于 2011-05-29 01:04:02
这似乎或多或少地满足了您的要求(至少如果变量是数字的)。会有更好的方法
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 2https://stackoverflow.com/questions/6131984
复制相似问题