Ich richte eine "Entscheidungskarte" in xts ein. Das Ergebnis der folgenden Code erzeugt folgende:xts - Berechnung der Spalten intakt beibehalten, auch wenn einige Spalten fehlen
dec.1 dec.2 dec.3 dec.4 Master.dec
2017-01-01 2 2 2 2 2
2017-02-02 3 3 3 3 3
2017-03-03 0 0 0 0 0
Es gibt immer mindestens existieren wird eine dieser Spalten (dec.1 -> Dec.4), aber es wird nicht bekannt sein, ob es 1,2,3 ist, oder 4 Spalten (Dez.1 -> Dez.4).
In der ursprünglichen Lösung werden die Entscheidungsspalten über das XTS-Sheet verteilt, so dass ich die Spaltennummer nicht als Bezeichner verwenden kann.
Frage:
In der Spalte "Master.dec" Ich rechne auf der Basis der linken Spalten (dec.1 - Dec.4), von denen es manchmal 1,2,3 sein wird, oder 4 Dezikonsäulen. Gibt es eine Möglichkeit, die Berechnung in "Master.dec" intakt und funktionsfähig zu halten, obwohl 1 bis 3 der Entscheidungsspalten nicht vorhanden wären?
das Problem zu reproduzieren Ich begegne:
1) führen Sie das komplette Skript
2) löschen eine Spalte: xts1 $ dec.1 < - NULL
3) laufen nur die Abschnitt 2 des Skripts (2.Add ein Regelsystem) ... erhalten Sie den Fehler:
Fehler in NextMethod (.Generic): dimmt [Produkt 3] stimmt nicht mit der Länge des Objekts überein [0]
Hinweis! Die Lösung sollte in der Lage sein, 1-3 Entscheidungsspalten zu entfernen, es wird immer eine Entscheidungsspalte geben, aber welche sind unbekannt.
# dependent libraries
library(matrixStats)
library(xts)
#############################################
# 1. Create the xts from a data.frame base
#############################################
# creates a dataframe
df1 <- data.frame(date = c("2017-01-01", "2017-02-02", "2017-03-03"),
other.1 = c(1998, 1999, 2000),
dec.1 = c(2, 3, 0),
other.2 = c(58, 54, 32),
other.3 = c(12, 3, 27),
dec.2 = c(2, 3, 0),
dec.3 = c(2, 3, 0),
other.4 = c(2, 5, 27),
dec.4 = c(2, 3, 0)
)
# transforms the column date to date-format
df1 = transform(df1,date=as.Date(as.character(date),format='%Y-%m-%d'))
# creates the xts, based on the dataframe df1
xts1 <- xts(df1[,-1],order.by = df1$date)
#############################################
# 2.Add a rule system:
# if all "dec"-columns are 2, add value 2 in master.dec
# if all "dec"-columns are 3, add value 3 in master.dec
# if all "dec"-columns are 0, (or any other combination then above) add value 0 in master.dec
#############################################
xts1$m.dec <- ifelse(rowSds(xts1)==0,rowMins(xts1),0)
:
Eine effiziente und präzise Lösung kann mit dem
matrixStats
Paket. Sehr klar, strukturiert und auf das, was ich brauche. Es ist eine sehr gute Basis. Was fehlt, ist: 1) Löschen einer dec.X-Spalte löst einen Fehler aus: xts1 $ dec.2 <- NULL: Fehler in NextMethod (.Generic): Dims [Produkt 3] stimmen nicht mit der Länge des Objekts [ 0]. 2) Die Möglichkeit, dec.X mit anderen Spalten dazwischen zu verteilen (wo es möglich wäre, dass diese Spalten tatsächlich eine 0/2/3 hätten, aber die matrixStats Funktion sollte nicht reagieren. (Nur am Dez.X – Toolboxich bin nicht sicher, ich bekomme, was das Problem ist, können Sie immer die Spalten im Voraus angeben, 'xts1 [, cols]' – mtoto
Ich werde den Code in dem Beispiel aktualisieren, um meine Kommentare zu klären. – Toolbox