여기에는 아주 직접적인 질문이 있습니다.data.table을 사용한 배포판 계산
나는 stackoverflow 및 google에 대한 모든 관련 게시물에 대한 검색을했지만 답변을 찾지 못했습니다. 히스토그램 또는 Hist
객체에 대한 준비 작업과 유사
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
, 내가 Price
의 다른 수준에 따라 Volume
의 분포를 구축하고 싶습니다 : 참조 데이터 Find which interval row in a data frame that each element of a vector belongs in 및 Split a vector into chunks in R
이루어집니다.
구체적 :
- 나누기 N 개/방식으로
Price
의 범위 (예를 들어, N = 5) 다른 빈들
위한
Volume
I는 split
함수 시도 패키지에 cut_number
등의 기능이 몇개인가 있습니다. 그리고 내가 생각 findInterval
도움이 될 수 있으며 코드는 다음과 같이해야합니다 : 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]
재현 데이터
(으로 만)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)))
원하는 출력 : 또한
Price Range Sum
102.3 - 102.5 300000
.
. (Total N bins, thus N rows)
.
105.0 - 105.3 500000
내가 시도 몇 가지 다른 조합은 모두 실패했습니다.
모든 의견을 환영합니다! 고마워.
감사합니다. @ chinsoon12, 귀하의 게시물에서 N은 빈당 숫자 (즉, 표본 크기)를 나타냅니다. 사실 프로그래밍의 맥락에서 N은 빈의 수를 의미합니다. 전체 인구를 상자로 균등하게 나눌 필요가 없습니다. 이 경우에 대한 아이디어를 제공해 줄 수 있습니까? 고마워요! – Bigchao