मैं दो एक्सटीएस ऑब्जेक्ट्स को जॉइन = "बाएं" यानी (बाएं ऑब्जेक्ट में सभी पंक्तियां, और जो दाईं ओर मेल खाते हैं) के साथ विलय कर रहा हूं। मैंने इन आपत्तियों को myEnv में लोड किया है।

library(quantmod)
myEnv <- new.env()
getSymbols("AAPL;FB", env=myEnv)
[1] "AAPL" "FB"  
MainXTS <- do.call(merge, c(eapply(myEnv, Cl), join = "left"))
head(MainXTS)
           AAPL.Close FB.Close
2007-01-03   2.992857       NA
2007-01-04   3.059286       NA
2007-01-05   3.037500       NA
2007-01-08   3.052500       NA
2007-01-09   3.306072       NA
2007-01-10   3.464286       NA
range(index(myEnv$AAPL))
[1] "2007-01-03" "2020-10-27"
range(index(myEnv$FB))
[1] "2012-05-18" "2020-10-27"

अब तक यह अपेक्षित रूप से काम कर रहा है क्योंकि उपरोक्त मर्ज किए गए ऑब्जेक्ट में टाइम इंडेक्स एपीपीएल से उठाया जा रहा है। मुद्दा यह है कि जब मैं टिकर का क्रम बदलता हूं ताकि एफबी पहले आए, तो मर्ज की गई वस्तु अभी भी एएपीएल से समय अनुक्रमणिका उठाती है।

myEnv <- new.env()
getSymbols("FB;AAPL", env=myEnv)
[1] "FB"   "AAPL"
MainXTS <- do.call(merge, c(eapply(myEnv, Cl), join = "left"))
head(MainXTS)
           AAPL.Close FB.Close
2007-01-03   2.992857       NA
2007-01-04   3.059286       NA
2007-01-05   3.037500       NA
2007-01-08   3.052500       NA
2007-01-09   3.306072       NA
2007-01-10   3.464286       NA

मैं उम्मीद कर रहा था कि समय सूचकांक एफबी से उठाया जाएगा। क्या किसी को पता है कि मैं क्या खो रहा हूँ?

मुझे लगता है कि इसका इस तथ्य से कुछ लेना-देना है कि वस्तुओं को लोड करने का क्रम समान है और इसके ऊपर के दोनों मामलों में यह है:

ls(myEnv)
[1] "AAPL" "FB"  
1
Stat 29 अक्टूबर 2020, 02:03

1 उत्तर

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

हम match के साथ ऑर्डर बदल सकते हैं

out <-  do.call(merge, c(lapply(mget(ls(myEnv)[match(ls(myEnv),
        c("FB", "AAPL"))], myEnv), Cl), join = "left"))

आउटपुट

head(out)
#           FB.Close AAPL.Close
#2012-05-18    38.23   18.94214
#2012-05-21    34.03   20.04571
#2012-05-22    31.00   19.89179
#2012-05-23    32.00   20.37714
#2012-05-24    33.03   20.19000
#2012-05-25    31.91   20.08178
0
akrun 29 अक्टूबर 2020, 02:13