Eine ziemlich einfache Frage hier.Berechnung der Verteilung mit data.table
Ich habe die Suche auf alle relevanten Beiträge auf Stackoverflow und Google aber nicht gefunden, um die Antwort zu finden.
Time Price Volume Amount Flag 1: 2016-01-04 09:05:06 105.0 9500 993700 1 2: 2016-01-04 09:20:00 104.1 23500 2446350 0 3: 2016-01-04 09:30:00 104.1 18500 1924550 1 4: 2016-01-04 09:30:01 103.9 12500 1300550 0 5: 2016-01-04 09:30:02 104.1 16118 1675233 1 6: 2016-01-04 09:30:05 104.0 13000 1352200 0 7: 2016-01-04 09:30:06 104.1 2500 260100 1 8: 2016-01-04 09:30:07 104.1 1500 156150 1 9: 2016-01-04 09:30:08 104.3 500 52150 1 10: 2016-01-04 09:30:10 104.0 1000 104000 0 11: 2016-01-04 09:30:11 103.9 1000 103900 0 12: 2016-01-04 09:30:15 104.0 3500 364450 1 13: 2016-01-04 09:30:17 104.3 2000 208450 1 14: 2016-01-04 09:30:19 104.3 1500 156450 1 15: 2016-01-04 09:30:20 104.4 500 52200 1 16: 2016-01-04 09:30:21 104.4 1500 156600 1 17: 2016-01-04 09:30:22 104.4 1000 104400 1 18: 2016-01-04 09:30:24 104.4 1500 156600 1 19: 2016-01-04 09:30:25 104.0 2000 208000 0 20: 2016-01-04 09:30:27 104.1 3500 364350 1
Ähnlich wie bei Vorbereitungsarbeiten für Histogramm oder Hist
Objekt, ich möchte bauen Verteilung von Volume
nach verschiedenen Ebenen der Price
: Es wird auf Find which interval row in a data frame that each element of a vector belongs in und Split a vector into chunks in R
Daten gemacht.
Um genau zu sein:
- Dividieren der Bereich von
Price
in N Stücke/Bins (Say, N = 5) - Sum up
Volume
für verschiedene Bins
versucht I split
Funktion und mehrere andere wie cut_number
Funktion in ggplot2
Paket. Und ich denke, findInterval
könnte hilfreich sein und der Code sollte wie folgt sein:
library(data.table)
dt[, sum(Volume), by = findInterval(Price,cut_number(Price, 5))] # Do not work
# I think the key should be in `by` part.
dt[, sum(Volume), by = some functions here]
Reproduzierbare Daten
dt <- data.table(structure(list(Time
= structure(c(1451898306, 1451899200,
1451899800,1451899801, 1451899802,
1451899805, 1451899806, 1451923195,
1451923196,1451923200), class =
c("POSIXct", "POSIXt"), tzone =
"GMT"),Price = c(105, 104.1,
104.1, 103.9, 104.1, 104, 104.1, 103,102.9, 102.9),
Volume = c(9500L, 23500L, 18500L,
12500L,16118L, 13000L, 2500L, 4000L, 2000L, 1000L),
Amount = c(993700L,2446350L,
1924550L, 1300550L, 1675233L, 1352200L, 260100L,412000L, 206016L, 102880L),
Flag = c(1L, 0L, 1L, 0L, 1L,0L,
1L, 1L, 0L, 1L)), .Names = c("Time",
"Price", "Volume","Amount",
"Flag"), class = c("data.table",
"data.frame"), row.names = c(NA,-10L)))
gewünschten Ausgang (nur für Abbildung):
Price Range Sum
102.3 - 102.5 300000
.
. (Total N bins, thus N rows)
.
105.0 - 105.3 500000
Und auch habe ich versucht, mehrere andere Kombinationen, alle fehlgeschlagen.
Alle Vorschläge sind willkommen! Danke vielmals.
Danke @ chinson12, In Ihrem Beitrag steht N für die Zahlen (d. H. Stichprobengröße) pro Fach. Im Zusammenhang mit meiner Programmierung steht N für die Anzahl der Bins. Keine Notwendigkeit, die Gesamtbevölkerung gleichmäßig in Behälter aufzuteilen. Könnten Sie mir ein paar Ideen für diesen Fall geben? Danke vielmals! – Bigchao