2015-12-08 10 views
6

मैं निम्न डेटाभरण Google स्प्रेडशीट में प्रक्षेप द्वारा डेटा गुम

A   B  D 
1 Date  Weight Computation 
2 2015/12/09   =B2*2 
3 2015/12/10 65  =B3*2 
4 2015/12/11   =B4*2 
5 2015/12/12   =B5*2 
6 2015/12/14 62  =B6*2 
7 2015/12/15   =B7*2 
8 2015/12/16 61  =B8*2 
9 2015/12/17   =B9*2 

मैं वजन ग्राफ़ चाहते हैं के साथ गूगल स्प्रैडशीट है w.r.t. तिथि, और/या अन्य स्तंभों के साथ इसका उपयोग करें जो वजन से अन्य मात्राओं की गणना करते हैं। हालांकि आप देखेंगे कि कुछ गायब प्रविष्टियां हैं। क्या मैं चाहता हूँ एक और स्तंभ जो डेटा जो अंतर्वेशित और में भरा लापता मूल्यों के साथ भार स्तंभ पर आधारित है है उदाहरण के लिए:।

A   B  C  D 
1 Date  Weight WeightI Computation 
2 2015/12/09   65  =C2*2   # use first known value 
3 2015/12/10 65  65  =C3*2 
4 2015/12/11   64  =C4*2   # =(62-65)/3*(1)+65 
5 2015/12/12   63  =C5*2   # =(62-65)/3*(2)+65 
6 2015/12/14 62  62  =C6*2 
7 2015/12/15   61.5 =C7*2   # =(61-62)/2*(1)+62 
8 2015/12/16 61  61  =C8*2 
9 2015/12/17   61  =C9*2   # use the last known value 

स्तंभ सी में कर रहे हैं रैखिक प्रक्षेप का उपयोग करने में भरा मान मैं डेटा गुम खोजने के लिए जब दो ज्ञात बिंदुओं के बीच।

मेरा मानना ​​है कि यह वास्तव में एक सरल और सामान्य उपयोग केस है, इसलिए मुझे यकीन है कि यह करने के लिए एक छोटी सी चीज है, लेकिन मैं कार्यों में निर्मित का उपयोग करके समाधान ढूंढने में असमर्थ हूं। मुझे स्प्रैडशीट्स के साथ भी ज्यादा अनुभव नहीं है। मैंने = INDEX, = MATCH, = VLOOKUP, = LINEST, = TREND इत्यादि के साथ प्रयोग करने में घंटों बिताए हैं, लेकिन मैं उदाहरणों से कुछ नहीं कर पा रहा हूं। एकमात्र समाधान जिसका मैं उपयोग कर सकता था वह Google Apps स्क्रिप्ट का उपयोग करके एक कस्टम फ़ंक्शन बनाना था। हालांकि मेरा समाधान काम करता है, ऐसा लगता है कि यह वास्तव में बहुत धीरे-धीरे निष्पादित होता है। मेरी स्प्रेडशीट भी विशाल है।

कोई संकेतक, समाधान?

+0

आप कोड आप कस्टम फ़ंक्शन के लिए लिखा था लेने, और यह एक 'onEdit से चलाने के लिए संशोधित करने से बेहतर हो सकता है()' ट्रिगर, या ऐसा ही कुछ। जब भी कोई बदलाव होता है तो फ़ंक्शन शायद संपूर्ण स्प्रेडशीट को फिर से समझते हैं। एक 'onEdit() 'ट्रिगर स्क्रिप्ट चला सकता है जो केवल स्क्रिप्ट में निर्दिष्ट सेल में मान को बदल देगा। आप [Google शीट्स इवेंट्स से लिंक] (https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events) दस्तावेज़ देखना चाहते हैं। –

उत्तर

4

मिले एक समाधान है कि मेरे आवश्यकताओं के सबसे का उपयोग कर संतुष्ट:

  1. प्रयुक्त =FILTER() पहले रिक्त लाइनों को हटाने के लिए जहां डेटा उपलब्ध नहीं है ("पनीर" से एक टिप के लिए धन्यवाद)।

  2. और =MATCH() फ़िल्टर की गई तालिका से लगातार दो पंक्तियों को देखने के लिए। मेरे मामले में मैं इस फ़ंक्शन का उपयोग करने में सक्षम था क्योंकि कॉलम A सॉर्ट किया गया है और इसमें दोहराव नहीं है।

  3. और उसके बाद मूल्यों को अलग करने के लिए लाइन सूत्र का उपयोग करना।

तो उत्पादन हो जाता है:

A   B  C   D  E 
1 Date   Weight FDdate  FWeight IWeight 
2 2015/05/09   2015/05/10 65.00 #N/A 
3 2015/05/10 65.00 2015/05/13 62.00 65.00 
4 2015/05/11   2015/05/15 61.00 64.00 
5 2015/05/12        63.00 
6 2015/05/13 62.00      62.00 
7 2015/05/14        61.50 
8 2015/05/15 61.00      61.00 
9 2015/05/16        61.00 
10 2015/05/17        61.00 

कहाँ कोशिकाओं C2 और D2 निम्न श्रेणी सूत्र (लघु ध्यान दें: निम्नलिखित सूत्र निश्चित रूप से अगर कॉलम A और B निकट हैं जोड़ा जा सकता है) है:

C2 =FILTER($A$2:$A$10, NOT(ISBLANK($B$2:$B$10))) 
D2 =FILTER($B$2:$B$10, NOT(ISBLANK($B$2:$B$10))) 

कोशिकाओं E2E10 के माध्यम से होते हैं निम्न पंक्ति प्रक्षेप सूत्र: [y = y1 + (y2 - y1)/(x2 - x1) * (x - x1)]:

E2 =(INDEX($D:$D, MATCH($A2, $C:$C, 1),  1)) 
    +(INDEX($D:$D, MATCH($A2, $C:$C, 1) + 1, 1) 
    - INDEX($D:$D, MATCH($A2, $C:$C, 1),  1)) 
    /(INDEX($C:$C, MATCH($A2, $C:$C, 1) + 1, 1) 
    - INDEX($C:$C, MATCH($A2, $C:$C, 1),  1)) 
    *(INDEX($C:$C, MATCH($A2, $C:$C, 1),  1) - $A2) * -1 

जब पहली सेल B2 एक मूल्य, # N/A में जहां सूत्र परिणाम नहीं है क्या इस समाधान के लिए काम नहीं करता है। यदि Google स्प्रेडशीट में =INTERPOLATE_LINE(A2, $A$2:$A$10, $B$2:$B$10) जैसे कुछ था, तो दुर्भाग्यवश यह अस्तित्व में नहीं था, यह सब अधिक कुशल होता। अगर मुझे Google स्प्रेडशीट में supported functions के पढ़ने में मुझे याद आया तो कृपया मुझे सही करें।

+0

चालाक समाधान, धन्यवाद! – electronpusher

7

आप forecast का उपयोग करना चाह सकते हैं जिसके लिए यह उन तिथियों को अलग करने के लिए पहले सुविधाजनक हो सकता है, जिनके पास आप नहीं हैं (और बाद में पुनर्व्यवस्थित करें)। साथ तो सिर्फ तीन रीडिंग कहते हैं:

 A  B 
1 10/12/2015 65 
2 14/12/2015 62 
3 16/12/2015 61 

और दिनांक जिसके लिए मूल्यों नीचे छोड़ दिया पर आवश्यक हैं:

6 09/12/2015 65.6 
7 11/12/2015 64.3 
8 12/12/2015 63.6 
9 15/12/2015 61.5 
10 17/12/2015 60.2 

सूत्र बी -6 में 65.6 को जन्म (और वहाँ से नीचे की नकल की दे रही है सूट करने के लिए) है:

=forecast(A6,$B$1:$B$3,$A$1:$A$3) 

यह काफी जिस तरह से आप को दिखाने में गणना नहीं है, लेकिन लापता अंत मान extrapolating द्वारा थोड़ा और अधिक सटीक, विशेष रूप से विचार किया जा सकता, आर अपने निकटतम उपलब्ध मूल्य को दोहराने से पहले।

मूल्यों की गणना करने के बाद आप संभवतः डेटा ऑर्डर में डेटा को फिर से इकट्ठा करना चाहते हैं। तो मैं प्रतिलिपि बी 6: बी 10 और संपादित करें, विशेष पेस्ट करें, चिपकाएं मूल्य केवल शीर्ष पर और फिर सूट करने के लिए सॉर्ट करें।

चार्ट के नीचे अपने ओ पी (हरा) में उन लोगों के साथ ऊपर (नीला) परिणामों की तुलना और दिए गए डेटा बिंदुओं के निशान:

SO34150309 example

+1

मैं अपने प्रयोगों में 'फॉरकास्ट()' का मान देख सकता हूं, मैंने पाया कि यह पूरी डेटा सीमा पर एक सीधी रेखा के रूप में इंटरपोलेट करता है। तो यह उन बिंदुओं के माध्यम से पता नहीं लगाएगा जहां डेटा पहले से उपलब्ध है। आदर्श रूप से, अगर मैं सीधी रेखा इंटरपोलेशन की बजाय एक स्पलीन फिटिंग का उपयोग कर सकता तो मुझे पसंद आया होगा। –

1

मुझे एक समाधान मिला जो पूरी तरह से आवश्यकताओं को पूरा करता है। मैंने एक अलग चादर का उपयोग किया ताकि मैं टुकड़ों में गणना को तोड़ सकूं।

एक नई शीट बनाएं। कक्ष A2-F2 में निम्न सूत्र दर्ज करें, और फिर उन्हें पृष्ठ पर कॉपी करें।

  1. सेल A2 : पहले कॉलम में अपने वजन डेटा कॉपी करें। सबसे हाल ही में दर्ज की गई वजन खोजें:

    'Daily Record'!D2

  2. सेल बी 2 (इस उदाहरण में, पत्रक का नाम डेली रिकॉर्ड है और वज़न स्तंभ डी में दर्ज कर रहे हैं)।

    =INDEX(FILTER(A$2:A2,A$2:A2 <> ""),COUNT(FILTER(A$2:A2,A$2:A2 <> "")),1)

  3. सेल C2: सबसे हाल ही में वजन में बाद के दिनों की संख्या की गणना।

    =IF(A2<>"",0,IF(ROW(C2)<3,0,C1+1))

  4. सेल डी 2: (। आज की तारीख या बाद से) अगले दर्ज की वजन का पता लगाएं

    =IFERROR(INDEX(FILTER(A2:A,A2:A <> ""),1,1),"")

  5. सेल E2: गणना दिनों की संख्या तक अगले वजन में।

    =IF(A2<>"",0,IF(E3="","",E3+1))

  6. सेल F2: अंतर्वेशित वजन की गणना।

    =IF(A2 <> "", A2, IF(D2 = "", "", B2 + (D2-B2)*C2/(C2+E2)))

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