2017-07-06 6 views
9

फिर भी आर सीखने के सबसेट पर मतलब है, लेकिन मैं व्यक्तिगत रूप से स्वीकार कर लिया है कि यह असंभव है, और मुझे आशा है कि आप में से एक ने मुझे गलत साबित कर सकते हैं।एक सबसेट

मैं मान < = 25 प्रतिशतक के लिए मतलब है, और मूल्यों> = 75 वाँ प्रतिशतक के लिए मतलब खोजने के लिए देख रहा हूँ; लेकिन पूरे डेटा सेट के लिए नहीं। मैं डेटा के सबसेट के लिए इन साधनों को ढूंढना चाहता हूं, जिनमें से प्रतिशत पाए गए थे।

इस डेटा जैसा दिखता है कि उत्पन्न होगा अपने ही:

library(data.table) 
DT <- data.table(V1 <- c('AR','AR','AR','AR','AR','AR','AD','AD','AD','AD','AD','AD','BD', 
         'BD','BD','BD','BX','CX','DX','DX','DD','DD','DD','DD','DR','DR', 
         'DR','DR','DR','DR'), 
       V2 <- c(.12,.02,.03,.22,.44,.09,.11,.17,.15,.26,.29,.27,.16,.16,.02,.12,.02, 
         .03,.22,.44,.09,.11,.17,.15,.26,.29,.27,.16,.16,.02)) 

ऐसा लगता है कि:

V1 V2 
1: AR 0.12 
2: AR 0.02 
3: AR 0.03 
4: AR 0.22 
5: AR 0.44 
6: AR 0.09 
7: AD 0.11 
8: AD 0.17 
9: AD 0.15 
10: AD 0.26 
11: AD 0.29 
12: AD 0.27 
13: BD 0.16 
14: BD 0.16 
15: BD 0.02 
16: BD 0.12 
17: BX 0.02 
18: CX 0.03 
19: DX 0.22 
20: DX 0.44 
21: DD 0.09 
22: DD 0.11 
23: DD 0.17 
24: DD 0.15 
25: DR 0.26 
26: DR 0.29 
27: DR 0.27 
28: DR 0.16 
29: DR 0.16 
30: DR 0.02 

प्रथम चरण: Calulate मंझला, 25 प्रतिशतक, 75 वाँ प्रतिशतक, और गिनती प्रत्येक A_, B_ के दिखावे , सी_, डी_। मिल गया:

dt.qtile <- DT[, list(Bottom = quantile(V2, .25), 
         Middle = quantile(V2, .5), 
         Top = quantile(V2, .75), 
       Appearances = .N), by = V1] 

का उत्पादन:

V1 Bottom Middle Top Appearances 
1: AR 0.045 0.105 0.1950   6 
2: AD 0.155 0.215 0.2675   6 
3: BD 0.095 0.140 0.1600   4 
4: BX 0.020 0.020 0.0200   1 
5: CX 0.030 0.030 0.0300   1 
6: DX 0.275 0.330 0.3850   2 
7: DD 0.105 0.130 0.1550   4 
8: DR 0.160 0.210 0.2675   6 

यह वह जगह है जहाँ मैं लगता है कि यह असंभव है। मैं मूल V2 में मूल्यों (डीटी $ V2) कि V1 में प्रत्येक अक्षर के संयोजन के लिए कम से कम या 75 वाँ प्रतिशतक को 25 प्रतिशतक, तो बराबर या उससे अधिक के मूल्य के बराबर कर रहे हैं करना चाहते हैं।

V1 V2 
1: AR 0.12 - Ignore - 
2: AR 0.02 <= 0.045 \ 
3: AR 0.03 <= 0.045 /mean = 0.05 (Bottom) 
4: AR 0.22 >= 0.1950 \ 
5: AR 0.44 >= 0.1950 /mean = 0.33 (Top) 
6: AR 0.09 - Ignore - 
    ------ 
7: AD 0.11 <= 0.155 > mean = 0.11 (Bottom) 
8: AD 0.17 - Ignore - 
9: AD 0.15 - Ignore - 
10: AD 0.26 >= 0.2675 \ 
11: AD 0.29 >= 0.2675 | mean = 0.2733 (Top) 
12: AD 0.27 >= 0.2675 /
     ... 
25: DR 0.26 - Ignore - 
26: DR 0.29 >= 0.2675 \ 
27: DR 0.27 >= 0.2675 /mean = 0.28 (Top) 
28: DR 0.16 <= 0.16 \ 
29: DR 0.16 <= 0.16  | mean = 0.17 (Bottom) 
30: DR 0.02 <= 0.16 /

औसत कि < = 25 प्रतिशतक हैं V2 में मूल्यों, तो मानों हैं> = 75 वाँ प्रतिशतक औसत निकालते हैं।

V1 Bottom Middle Top Appearances 
1: AR 0.025 0.105 0.3300   6 
2: AD 0.110 0.215 0.2733   6 
        ... 
8: DR 0.170 0.210 0.2800   6 

यह मैं करीब हो जाता है:

DT[V2 < quantile(V2, .25), mean(V2), by = V1] 

लेकिन यह पूरे डेटा सेट, नहीं प्रत्येक अक्षर के संयोजन के लिए quantile कंप्यूटिंग है

नई उत्पादन कुछ इस तरह होना चाहिए।

तो मैं कोशिश:

DT[V2 < DT[, quantile(V2, .25), by = V1], mean(V2), by = V1] 

मैं इस मिल:

Error in `[.data.table`(DT, V2 < DT[, quantile(V2, 0.25), by = V1], mean(V2), : 
    i is invalid type (matrix). 
Perhaps in future a 2 column matrix could return a list of elements of DT 
(in the spirit of A[B] in FAQ 2.14). 
Please let datatable-help know if you'd like this, or add your comments to FR #657. 

मैं जानता हूँ कि इस सरल हो गया है, लेकिन मैं सिर्फ यह नहीं देख सकता। मैं क्या खो रहा हूँ? मुझे बताएं कि मैं कहां स्पष्टीकरण दे सकता हूं।

मैं अग्रिम में आपकी मदद की सराहना करते हैं!

संपादित

DT[, list(Bottom = mean(V2[V2 <= quantile(V2, 0.25)]), 
      Middle = median(V2), 
       Top = mean(V2[V2 >= quantile(V2, 0.75)]), 
     Appearances = .N), by = V1] 

मैं कभी नहीं इस अपने दम पर पाया होता।

उत्तर

1
DT[, mean(V2[V2 < quantile(V2, 0.25)]), by = V1] 
    V1 V1 
1: AR 0.025 
2: AD 0.130 
3: BD 0.020 
4: BX NaN 
5: CX NaN 
6: DX 0.220 
7: DD 0.090 
8: DR 0.020 

DT[, mean(V2[V2 > quantile(V2, 0.75)]), by = V1] 
    V1 V1 
1: AR 0.33 
2: AD 0.28 
3: BD NaN 
4: BX NaN 
5: CX NaN 
6: DX 0.44 
7: DD 0.17 
8: DR 0.28 
+0

आपके द्वारा बताए गए हिस्सों में आप '<=' और दूसरों में ''' 'का उपयोग कर रहे थे। स्पष्ट रूप से '<' and '>' और जहां आवश्यक हो ''<=' and '> =' के लिए स्वैप किया जाए। –

+0

आपको आशीर्वाद दो, महोदय। मैं कोड पहले से ही एक या दो बार चला चुका हूं, और मैं इसे अपने डेटा पर एक शॉट देने जा रहा हूं। मैं परिणामों के साथ वापस रिपोर्ट करूंगा! – Jake

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