2016-09-18 5 views
5

द्वारा संक्षेप में यहां एक MWE है।गैर-इक्विटी शामिल हों, फिर समूह

dta <- data.table(id=rep(1:2, each=5), seq=rep(1:5, 2), val=1:10) 
dtb <- data.table(id=c(1, 1, 2, 2), fil=c(2, 3, 3, 4)) 
dtc <- data.table(id=c(1, 1, 2, 2), mval=rep(0, 4)) 
for (ind in 1:4) dtc$mval[ind] <- mean(dta$val [dta$id == dtb$id[ind] & dta$seq < dtb$fil[ind]]) 

dtc 
# id  mval 
# 1: 1  1.0 
# 2: 1  1.5 
# 3: 2  6.5 
# 4: 2  7.0 

डीटीसी में डीटीबी के समान पंक्तियों की संख्या होनी चाहिए। हर (पंक्ति) के लिए डीटीसी में ind,

  1. dtc$id[ind] = dtb$id[ind]
  2. dtc$mval[ind] = mean(dta$val[x]), जहां x dta$id == dtb$id[ind] & dta$seq < dtb$fil[ind] है।

मेरा डेटाटेबल बहुत बड़ा है। इसलिए, मैं उपरोक्त को कम से कम स्मृति पदचिह्न के साथ प्राप्त करने का एक तरीका ढूंढ रहा हूं। मैं एक गैर-इक्की में शामिल होने और फिर संक्षेप में सोच रहा था, लेकिन मुझे लगता है कि यह काम करने के लिए नहीं लगता है। इसलिए, प्रश्न का शीर्षक।

किसी भी मदद की बहुत सराहना करेंगे, धन्यवाद!

उत्तर

5

हो सकता है इस में मदद करता है

dtc[, mval := dta[dtb, mean(val) ,on =.(id, seq < fil), by = .EACHI]$V1] 
dtc 
# id mval 
#1: 1 1.0 
#2: 1 1.5 
#3: 2 6.5 
#4: 2 7.0 
संबंधित मुद्दे