在R中矢量化数据框中数据的计算是否可能,其中执行计算的一个条件来自外部数据框?这可以使用进行循环执行,但速度很慢。在R中的关系数据框中矢量化计算
完整的任务涉及以关系格式询问15年的医学实验室数据。例如,外科手术后三个月内患者记录的最低血红蛋白水平是多少?这来自两个表格:一个具有手术日期(约6000,通常每个患者多个)和一个过期血红蛋白水平(约200,000,每个患者多个)。下面的循环每个查询需要大约30分钟。
在此MWE数据位于两个表中并通过索引进行链接。
##create two dataframes
a<-c("ID1","ID2","ID3","ID2","ID1")
b<-c(1,2,3,4,5)
c<-as.Date(c("2005-01-01","2002-01-01","2003-01-01","2004-01-01","2001-01-01"))
df.1<-cbind.data.frame(a,b,c,stringsAsFactors=FALSE)
d<-c("ID1","ID2","ID1")
e<-as.Date(c("2002-02-01","2001-02-01","2000-01-01"))
df.2<-cbind.data.frame(d,e,stringsAsFactors=FALSE)
>df.1
a b c
1 ID1 1 2005-01-01
2 ID2 2 2002-01-01
3 ID3 3 2003-01-01
4 ID2 4 2004-01-01
5 ID1 5 2001-01-01
>df.2
d e
1 ID1 2002-02-01
2 ID2 2001-02-01
3 ID1 2000-01-01
out<-rep(NA,length(df.2$d))
for(i in 1:length(df.2$d)){
out[i]<-max(df.1$b[df.1$a==df.2$d[i] & df.1$c>df.2$e[i]])
}
> cbind(df.2,out)
d e out
1 ID1 2002-02-01 1
2 ID2 2001-02-01 4
3 ID1 2000-01-01 5
这个:'df.1 $ a == df.2 $ d [i]'对整个列测试一个值,而逻辑表达式的另一半也是这样。结果用作列索引。这真的没有意义。那么你试图完成什么?无论如何? – 2014-11-03 04:42:28