Zoo und xts Objekte werden durch den Index vor Operationen ausgerichtet werden:
returns * decFac
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 3.549359e-04 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -1.442384e-04 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-26 4.797723e-04 -1.569965e-05 8.784789e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -6.588939e-04 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
returns_zoo * decFac_zoo
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 3.549359e-04 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -1.442384e-04 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-26 4.797723e-04 -1.569965e-05 8.784789e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -6.588939e-04 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
Überlegen Sie, was, wenn Sie waren passieren würde:
library(xts)
time = seq.Date(as.Date('2014-12-23'), as.Date('2014-12-31'), by = 'day')
time = time[c(1,2,4,7:9)]
AAPL = c(-0.0035479832, -0.0047206092, 0.0175226064,
-0.0007020609, -0.0122776892, -0.0192020576)
DISCA = c(0.0137774854, -0.0054309123 , -0.0005733945 ,
NA, NA, -0.0219631307)
IBM = c(0.004943048, -0.002592361, 0.003208447,
NA, NA, 0.002433726 )
JNJ = c(-0.0233164191, 0.0029684238, 0.0044836732,
0.0025666222, 0.0002847851, -0.0075263261 )
KO = c(0.0145336114, -0.0006984054, 0.0004657399,
-0.0023303779, -0.0023360686, -0.0127090448)
NKE = c(0.0004169359, 0.0033288228, 0.0055922518,
NA, NA, -0.0075636285)
TXN = c(-0.0007298205, 0.0014592993, -0.0020985205,
NA, NA, -0.0086595788)
decFac_v = c(0.02576202, 0.02655878, 0.02738019,
0.02822700, 0.02910000, 0.03000000 )
returns_zoo = zoo(cbind(AAPL, DISCA, IBM, JNJ, KO, NKE, TXN), time)
returns = xts(cbind(AAPL, DISCA, IBM, JNJ, KO, NKE, TXN), time)
decFac_zoo = drop(zoo(decFac_v, time))
decFac = drop(xts(decFac_v, time))
den Zoo oder xts Multipliziert man zusammen sollten Objekten arbeiten Untergruppe returns
oder decFac
Objekte:
# subsetting
x = zoo(cbind(AAPL, DISCA, IBM, JNJ, KO, NKE, TXN), time)
y = drop(zoo(decFac_v, time))
x * y
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 3.549359e-04 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -1.442384e-04 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-26 4.797723e-04 -1.569965e-05 8.784789e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -6.588939e-04 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
x * y[-3] # does not return values corresponding to the third date index
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 0.0003549359 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -0.0001442384 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -0.0006588939 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
x[-3] * y # does not return values corresponding to the third date index
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 0.0003549359 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -0.0001442384 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -0.0006588939 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
x[,-3] * y # does not return values corresponding to the 3rd symbol column
# AAPL DISCA JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 3.549359e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -1.442384e-04 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-26 4.797723e-04 -1.569965e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05
# 2014-12-29 -1.981707e-05 NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -6.588939e-04 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
Überlegen Sie, was passieren würde, wenn Sie den Datumsbereich erweitern waren:
# expanding time dimension
expanded_time = seq.Date(as.Date('2012-01-04'),
as.Date('2014-12-22'),
by = 'day')
value = rep_len(1, length(expanded_time))
old_returns = xts(cbind(AAPL = value,
DISCA = value,
IBM = value,
JNJ = value,
KO = value,
NKE = value,
TXN = value),
expanded_time)
returns_expanded_time = xts(rbind(old_returns, returns), c(expanded_time, time))
returns_expanded_time * decFac
# returns only values where the date index of each object matches:
# AAPL DISCA IBM JNJ KO NKE TXN
# 2014-12-23 -9.140321e-05 3.549359e-04 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05
# 2014-12-24 -1.253736e-04 -1.442384e-04 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05
# 2014-12-26 4.797723e-04 -1.569965e-05 8.784789e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA
# 2014-12-31 -5.760617e-04 -6.588939e-04 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04
Überlegen Sie, was passieren würde, wenn Sie zusätzliche Spalten anhängen waren:
new_column1 = rep_len(1, length(c(expanded_time, time)))
new_column2 = new_column1
returns_expanded_cols = xts(
cbind(rbind(old_returns, returns),
nc1 = new_column1,
nc2 =new_column2),
c(expanded_time, time))
returns_expanded_cols * decFac
# returns only values where the date index of each object matches,
# including the two new columns, `nc1` and `nc2`
# AAPL DISCA IBM JNJ KO NKE TXN nc1 nc2
# 2014-12-23 -9.140321e-05 3.549359e-04 1.273429e-04 -6.006781e-04 3.744152e-04 1.074111e-05 -1.880165e-05 0.02576202 0.02576202
# 2014-12-24 -1.253736e-04 -1.442384e-04 -6.884995e-05 7.883771e-05 -1.854880e-05 8.840947e-05 3.875721e-05 0.02655878 0.02655878
# 2014-12-26 4.797723e-04 -1.569965e-05 8.784789e-05 1.227638e-04 1.275205e-05 1.531169e-04 -5.745789e-05 0.02738019 0.02738019
# 2014-12-29 -1.981707e-05 NA NA 7.244804e-05 -6.577958e-05 NA NA 0.02822700 0.02822700
# 2014-12-30 -3.572808e-04 NA NA 8.287246e-06 -6.797960e-05 NA NA 0.02910000 0.02910000
# 2014-12-31 -5.760617e-04 -6.588939e-04 7.301178e-05 -2.257898e-04 -3.812713e-04 -2.269089e-04 -2.597874e-04 0.03000000 0.03000000
ich bin nicht sicher, wie Sie Ihren Vorschlag zur Umsetzung Ich habe jahrelange Daten und Tausende von Symbolen (ich aktualisiere meine Frage, um darauf hinzuweisen. . Ich habe darauf hingewiesen, die Zeit war 2 Jahre mit "Zoo-Serie von 2012-01-04 bis 2014-12-31" – John
Mein Vorschlag ist einfach zu 'Returns von' DecFrac zu multiplizieren. Das Ergebnis ist das Produkt der beiden Objekte für jeden Fall, in dem es einen Wert in 'returns' und' decFrac' gibt, die einen passenden Datumsindex haben. Dieses Konzept gilt weiterhin für Datums- und Spaltenbereiche, die sich vom Endstück Ihres Datasets unterscheiden. Ich werde meiner Antwort hinzufügen, um zu illustrieren, was das Produkt wäre, wenn ich die Reichweite eines der Objekte untergliedere oder erweitere. –