在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