मैं एक अवलोकन का योग प्राप्त करने के लिए zoo::rollsum() का उपयोग कर रहा हूं, जिसके ठीक पहले दो अवलोकन हैं। हालांकि, वर्तमान में, परिणाम तीन के प्रत्येक सेट की शीर्ष/प्रारंभिक पंक्ति में दिख रहा है, लेकिन मैं इसे अंतिम/नवीनतम पंक्ति में चाहता हूं।

यह उदाहरण कोड है:

library(zoo)
library(data.table)
random_dt <- data.table(group = LETTERS, total = sample(1:10, 26, replace = T))
random_dt <- random_dt[, .(group, total, 
                       rolling_total = as.numeric(rollsum(total, 3, align = "right")))]

मैं align = "right" का उपयोग कर रहा हूं, जैसा कि आप देख सकते हैं, जो मुझे समझ में आया कि इससे प्रभावित हुआ। जब मैं align = "left" या align = "center" का उपयोग करता हूं, तो कुछ भी नहीं बदलता है।

मुझे एक चेतावनी भी मिलती है, जो संभवतः प्रासंगिक हो सकती है:

चेतावनी संदेश: as.data.table.list(jval) में: आइटम ३ का आकार २४ है लेकिन अधिकतम आकार २६ है (दो वस्तुओं के शेष को छोड़कर पुनर्चक्रण)

मैं संदेश को समझता हूं - ऐसा करने से, पहले दो अवलोकनों में तीन का रोलिंग योग बनाने के लिए पर्याप्त पिछले अवलोकन नहीं होते हैं। आदर्श रूप से इन मूल्यों को NA या कुछ और के रूप में छोड़ दिया जाएगा। लेकिन संभवत: यह मुद्दा मूल्यों को ऊपर उठाने में योगदान दे रहा है, जैसा कि यह था? मेरे लिए यह स्पष्ट नहीं है कि rolling_total कॉलम में अंतिम दो मान किस पर आधारित हैं।

r zoo
1
Jaccar 5 फरवरी 2019, 14:54

1 उत्तर

सबसे बढ़िया उत्तर

मुद्दा यह है कि na.pad डिफ़ॉल्ट रूप से FALSE है, और fill तर्क निर्दिष्ट नहीं है। तो, यह शुरुआत में NAs को गिरा देगा और इससे लंबाई में असंतुलन हो जाता है। इसे na.pad = TRUE में बदलें और काम करना चाहिए

random_dt[, .(group, total, rolling_total = as.numeric(rollsum(total, 3, 
     align = "right", na.pad = TRUE)))]

साथ ही, ओपी ने na.pad के लिए पदावनत चेतावनी के बारे में उल्लेख किया है, इस प्रकार fill = NA अधिक उपयुक्त होगा

1
akrun 5 फरवरी 2019, 15:03