首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在S语言中进行处理--紧急数据转换?

如何在S语言中进行处理--紧急数据转换?
EN

Stack Overflow用户
提问于 2011-05-25 23:08:39
回答 1查看 663关注 0票数 1

您将如何在R中做到这一点?(这是一项数据准备任务),从不良事件数据集中派生出治疗--紧急不良事件数据集:对于每个身体系统和首选术语,每个患者都有一行数据,以便:

  1. 认为不良事件发生在基线后时期,而不是基线期,或
  2. ,即使该事件确实发生在基线期,但其发生在基线后的严重程度高于基线

期间观察到的严重程度。

变量:

代码语言:javascript
复制
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行代码:

代码语言:javascript
复制
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 )

代码语言:javascript
复制
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代码示例的格式是可怕的,为什么堆栈溢出忽略了一些返回/换行符?

EN

回答 1

Stack Overflow用户

发布于 2011-05-29 01:04:02

这似乎或多或少地满足了您的要求(至少如果变量是数字的)。会有更好的方法

代码语言:javascript
复制
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看起来像

代码语言:javascript
复制
   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将查看

代码语言:javascript
复制
  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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6131984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档