R Fehler: "In numerischer Ausdruck hat 19 Elementen: nur der erste benutzt"
Erstellte ich einen dataframe:
totalDeposit <- cumsum(testd$TermDepositAMT[s1$ix])
die im Grunde ist die Berechnung der kumulativen Summe der TermDeposit Beträge in testd dataframe und speichern Sie es in der gesamten Kaution. Dies funktioniert perfrectly ok.
Ich dann berechnen die Durchschnittliche Einzahlungsbetrag, und ich verwende die folgenden:
avgDeposit <- totalDeposit / (1:testd)
bekomme aber eine Fehlermeldung
Error in 1:testd : NA/NaN argument
In addition: Warning message:
In 1:testd : numerical expression has 19 elements: only the first used
testd hat rund 8000 Beobachtungen und 19 Variablen.
Könnte jemand mir helfen, Vergangenheit dieses Problem? Ich habe versucht, suchen Sie die folgende Fehlermeldung online, aber alle hab ich verstanden so weit ist, dass 1:testd im Grunde macht R Lesen testd als eine Zahl, die es nicht und deshalb erhalte ich eine Fehlermeldung. Würde einfach bedeuten(totalDeposit) den trick tun? Ich habe es versucht, aber die Figur die ich bekomme, ist absurd und nirgends Vertreter der Durchschnitt.
Danke für Eure Hilfe.
Der Ausdruck "a:b" verlangt, dass beide
a
und b
werden Skalare (also einzelne Elemente). Ihre testd
hat eher mehr als eine. Sie wollen wahrscheinlich totalDeposit/(1:length(totalDeposit))
.danke. Ich versuchte, Ihnen und Ironholds Antwort und Sie sind ähnlich in der Ausgabe.
InformationsquelleAutor Freewill | 2014-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fehlermeldung ist in diesem Fall hilfreich.
Wenn Sie sagen
1:N
, was Sie sagen R "gib mir die Sequenz von ganzen zahlen zwischen 1 und N". Es ist von integer1, integer2.testd
ist nicht ein integer ist, ist es (am besten) einen ganzen Vektor von ganzen zahlen, und damit R verfügt über alle, aber der erste Wert intestd
bei der Berechnung der Reihenfolge. Die alternative wäre entweder einen schrecklichen Fehler oder eine set von Sequenzen, die zwischen 1 und der erste Wert intestd
, ein weiteres zwischen 1 und der zweite Wert intestd
...und so weiter.Was Sie wollen, statt ist
1:nrow(testd)
, wenn testd ist ein Daten-frame, und entweder1:length(testd)
oderseq_along(testd)
wenn es eine Liste oder Vektor.Basiert auf der Frage, obwohl Sie - die Notwendigkeit zur Berechnung der Durchschnittswerte? - bist du eigentlich an dieses falsch ist, weil Sie nicht wollen, eine Sequenz von Werten, Sie wollen einfach nur eins: da Durchschnitt = Summe/Anzahl der Elemente, die daran total, Sie will nur 'die Anzahl der Elemente' - die abgerufen werden können, einfach mit
nrow(testd)
.nrow(testd) ist eine einzelne Zahl, die 1:nrow(testd) ist eine Folge von zahlen beginnend mit 1.
Was BondedDust sagte. 1:nrow(testd) ist am besten zu verstehen, wie "gib mir alle zahlen zwischen 1 und der Anzahl der Zeilen in testd, inclusive". also, wenn testd hat 5 Zeilen, es ist 1,2,3,4,5. 3:nrow(testd) wäre 3,4,5. So, geteilt durch nrow(testd) ist einfach die Division durch die Anzahl der Zeilen. Teilung durch 1:nrow(testd) ist in teilen durch jede ganze Zahl, die wiederum zwischen 1 und der Anzahl der Zeilen.
überprüfen Sie heraus meine geänderte Antwort oben; nrow(testd) ist, was Sie wollen, wenn Sie die Berechnung eines Durchschnitts.
nochmals vielen Dank, im Versuch, vorherzusagen, eine Durchschnittliche Einzahlungsbetrag für jede Beobachtung (Kunden -) also ich habe das Gefühl, dass die Idee ist, einen Mittelwert für jede Zeile und das ist das, was 1:nrow(testd) erreichen im Gegensatz zu nrow(testd), die nur eine Gesamtwert. Es ist ein Buch, das im folgenden finden Sie einige Hilfen, die auf die Codierung und das Buch hatte einen ähnlichen code, aber ich nicht ganz verstehen, was Sie versuchten zu tun. Es macht ein wenig mehr Sinn jetzt.
InformationsquelleAutor
Es ist ziemlich klar, dass
testd
ist ein dataframe oder eine Liste, da Sie nicht zu einem Fehler kommentestd$
. Wenn Sie hatte einetestd
in denen das erste element waren eine Nummer, aber es war mehr als ein element würden Sie nur bekommen haben eine Warnung. Sie vielleicht schreiben wollte:... obwohl ich gestehe, dass es scheint nicht sehr nützlich. Es wird nicht mindestens ein Fehler ausgelöst.
InformationsquelleAutor 42-