2013-04-22 14 views
6

में सूची के स्तंभ से स्तंभ बनाएं मैं निम्न कार्य पूरे करने को समझ नहीं सकता, data.tabledata.table

set.seed(123); N=1e5 
DT = data.table(x=rnorm(N), y=sample(c('a','b','c'),N,T)) 
probs = seq(.1,1,.1); newCols <- paste("q",100*probs,sep=""); 

DT2 <- DT[ ,list(Q=list(quantile(x,probs=probs))),by=y] 
DT2 
# y                   Q 
#1: b -1.2817037351734,-0.840293441466144,-0.525195748246148,-0.259574774974136, 
#2: c -1.26975023312311,-0.832359658553173,-0.513320691339448,-0.247863323660894, 
#3: a -1.28189935066568,-0.838918942382995,-0.522409189372727,-0.257356179072232, 

#Here I want to create 10 columns from Q called q10, q20... 
DT2[ , newCols:=Q] #can't make this work because it is evaluated in the wrong environment I guess 

उत्तर

11

के साथ सूची का एक स्तंभ से स्तंभ की एक गतिशील संख्या crating इस प्रयास करें:

DT2 <- DT[ , as.list(quantile(x,probs=probs)),by=y] 
setnames(DT2, c("y", paste0("q", seq(10, 100, by=10)))) 

# y  q10  q20  q30  q40   q50  q60  q70  q80 
# 1: b -1.281704 -0.8402934 -0.5251957 -0.2595748 -0.001625739 0.2526686 0.5251940 0.8379979 
# 2: c -1.269750 -0.8323597 -0.5133207 -0.2478633 0.003413041 0.2598378 0.5353759 0.8477539 
# 3: a -1.281899 -0.8389189 -0.5224092 -0.2573562 0.001186281 0.2542550 0.5244238 0.8401411 
#   q90  q100 
# 1: 1.284773 3.856234 
# 2: 1.283465 4.322815 
# 3: 1.273615 3.921410 
+0

अच्छी तरह से किया गया, मुझे इस चाल का जिक्र करने वाला एक और पोस्ट नहीं मिल रहा है, हालांकि मेरे पास इंप्रेशन है कि यह वेनिला है ... अजीब बात यह है कि अगर मैं नए नामों के नाम के साथ एनए का नाम-वेक्टर बनाता हूं तो ' डीटी 2 [, नाम (MyNAVec): = क्यू] ' – statquant

+0

@statquant काम करेगा, वास्तव में कुछ हालिया पोस्ट वास्तव में हैं (पीआर मोटे तौर पर खोजने में आसान नहीं है क्योंकि इसमें स्पष्ट शीर्षक नहीं है)। देखें [** यह **] (http://stackoverflow.com/a/15510828/559784) और [** यह **] (http://stackoverflow.com/questions/6902087/proper-fastest-way- टू-आकृति बदलें एक डेटा तालिका/15512437 # 15512437)। – Arun

+0

@statquant, कृपया संपादित समाधान की जांच करें। मैंने इसे * तेज * के रूप में संशोधित किया है। पिछले समाधान कई समूहों के तहत अक्षम है (क्योंकि प्रत्येक समूह के लिए नाम बनाए जाते हैं)। – Arun

संबंधित मुद्दे