2017-03-22 9 views
8

में समूह की कटौती की मुझे क्या करना quantile कटौती प्रत्येक समूहquantile data.table

qcut = function(x, n) { 
    quantiles = seq(0, 1, length.out = n+1) 
    cutpoints = unname(quantile(x, quantiles, na.rm = TRUE)) 
    cut(x, cutpoints, include.lowest = TRUE) 
} 

library(data.table) 
dt = data.table(A = 1:10, B = c(1,1,1,1,1,2,2,2,2,2)) 
dt[, bin := qcut(A, 3)] 
dt[, bin2 := qcut(A, 3), by = B] 

dt 
A  B bin  bin2 
1: 1 1 [1,4] [6,7.33] 
2: 2 1 [1,4] [6,7.33] 
3: 3 1 [1,4] (7.33,8.67] 
4: 4 1 [1,4] (8.67,10] 
5: 5 1 (4,7] (8.67,10] 
6: 6 2 (4,7] [6,7.33] 
7: 7 2 (4,7] [6,7.33] 
8: 8 2 (7,10] (7.33,8.67] 
9: 9 2 (7,10] (8.67,10] 
10: 10 2 (7,10] (8.67,10] 

यहाँ के लिए (अंक की समान संख्या के साथ एन डिब्बे में कटौती) चाहते हैं समूहीकरण बिना कटौती सही है - डेटा झूठ डिब्बे में। लेकिन समूह द्वारा परिणाम गलत है।

मैं इसे कैसे ठीक कर सकता हूं?

+2

'डीटी [, qcut (ए, 3), = बी द्वारा]' हालांकि – Cath

उत्तर

8

यह कारकों को संभालने में एक बग है। कृपया जांचें कि क्या यह ज्ञात है (या विकास संस्करण में तय है) और इसे डेटाटेबल बग ट्रैकर को अन्यथा रिपोर्ट करें। = As.character (qcut (ए, 3)), द्वारा:

qcut = function(x, n) { 
    quantiles = seq(0, 1, length.out = n+1) 
    cutpoints = unname(quantile(x, quantiles, na.rm = TRUE)) 
    as.character(cut(x, cutpoints, include.lowest = TRUE)) 
} 

dt[, bin2 := qcut(A, 3), by = B] 
#  A B bin  bin2 
# 1: 1 1 [1,4] [1,2.33] 
# 2: 2 1 [1,4] [1,2.33] 
# 3: 3 1 [1,4] (2.33,3.67] 
# 4: 4 1 [1,4] (3.67,5] 
# 5: 5 1 (4,7] (3.67,5] 
# 6: 6 2 (4,7] [6,7.33] 
# 7: 7 2 (4,7] [6,7.33] 
# 8: 8 2 (7,10] (7.33,8.67] 
# 9: 9 2 (7,10] (8.67,10] 
#10: 10 2 (7,10] (8.67,10] 
+5

समारोह, 'डीटी [, bin2 बदले बिना काम करता है = बी] 'भी काम करता है और यदि इसे किसी कारक में परिवर्तित करने की कोशिश कर रहा है ('dt [, bin2: = as.factor (as.character (qcut (ए, 3))), = बी द्वारा]') एक त्रुटि फेंकता है। .. – Cath

+0

हाँ, यदि आप प्रति समूह कारकों को परिभाषित करते हैं, तो अंतिम कॉलम (समूहों को संयोजित) समूह 1 से केवल गुण (जैसे स्तर) लेगा, मुझे लगता है कि https://github.com/Rdatatable/data.table/issues/ 967 – Frank