有沒有簡單的方法來評估一個範圍,並檢查一個整數是否在該範圍內?檢查一個整數是否在data.table的特定範圍內?
此職位以外Check to see if a value is within a range in R?我沒有找到其他相關的。
例
range <- cut(rep(1,5),4) # Create intervals
range.test <- range[2]
# Now I want to check whether integer 1L is within the range.test (Of course it is)
Code comes here.
我試圖使用findInterval
並且還轉換range.test
到載體,或使用seq
,inrange
或其它功能,但是失敗了。
由於所有分析都基於data.table
,並且這部分分析構成了整個實踐的一部分,其輸出優選爲一個data.table,所以我將標記data.table
用於確保一致性。
EDIT
在data.table
上下文中的全貌。
dt <- data.table(structure(list(Time = c("2016-01-04 09:05:06", "2016-01-04 09:20:00","2016-01-04 09:30:00", "2016-01-04 09:30:01", "2016-01-04 09:30:02","2016-01-04 09:30:05", "2016-01-04 09:30:06", "2016-01-04 09:31:35","2016-01-04 09:31:38", "2016-01-04 09:32:33"), Price = c(105,104.1, 104.1, 103.9, 104.1, 104, 104.1, 104.1, 104.1, 104), Volume = c(9500L,23500L, 18500L, 12500L, 16118L, 13000L, 2500L, 300L, 500L, 500L), Flag = c(1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L), Ticker = c("0001","0001", "0001", "0001", "0001", "0001", "0001", "0001", "0001","0001")), .Names = c("Time", "Price", "Volume", "Flag", "Ticker"), class = c("data.table", "data.frame"), row.names = c(NA, -10L)))
Time Price Volume Flag Ticker 1: 2016-01-04 09:05:06 105.0 9500 1 0001 2: 2016-01-04 09:20:00 104.1 23500 0 0001 3: 2016-01-04 09:30:00 104.1 18500 1 0001 4: 2016-01-04 09:30:01 103.9 12500 0 0001 5: 2016-01-04 09:30:02 104.1 16118 1 0001 6: 2016-01-04 09:30:05 104.0 13000 0 0001 7: 2016-01-04 09:30:06 104.1 2500 1 0001 8: 2016-01-04 09:30:07 104.1 1500 1 0001 9: 2016-01-04 09:30:08 104.3 500 1 0001 10: 2016-01-04 09:30:10 104.0 1000 0 0001 11: 2016-01-04 09:30:11 103.9 1000 0 0001 12: 2016-01-04 09:30:15 104.0 3500 1 0001 13: 2016-01-04 09:30:17 104.3 2000 1 0001 14: 2016-01-04 09:30:19 104.3 1500 1 0001 15: 2016-01-04 09:30:20 104.4 500 1 0001 16: 2016-01-04 09:30:21 104.4 1500 1 0001 17: 2016-01-04 09:30:22 104.4 1000 1 0001 18: 2016-01-04 09:30:24 104.4 1500 1 0001 19: 2016-01-04 09:30:25 104.0 2000 0 0001 20: 2016-01-04 09:30:27 104.1 3500 1 0001 21: 2016-01-04 09:30:35 104.0 500 0 0001 22: 2016-01-04 09:31:14 104.1 5000 1 0001 23: 2016-01-04 09:31:15 104.1 500 1 0001 24: 2016-01-04 09:31:18 104.1 2500 1 0001 25: 2016-01-04 09:31:25 104.1 3000 1 0001 26: 2016-01-04 09:31:29 104.0 2000 0 0001 27: 2016-01-04 09:31:30 104.1 500 1 0001 28: 2016-01-04 09:31:35 104.1 300 1 0001 29: 2016-01-04 09:31:38 104.1 500 1 0001 30: 2016-01-04 09:32:33 104.0 500 0 0001
# First get the distribution of the Volume
distribution <- dt[Flag == 1, sum(Volume), by = cut(Price, 5)][, percentage := list(V1/sum(V1))]
# Get the max range bin
Max_range <- distribution[which.max(percentage), cut]
# Get the Closing price
Closing_price <- dt[.N, Price]
# Check whether the closing price is in the Max_range
Code comes here[?????]
所以來這裏的問題:針對特定Ticker
,如何檢查的收盤價是否在規定的範圍內?只需要True
或False
即可。如果closing_price
在Max_range
內,則對應的Signal
將是True
,否則將是False
。
EDIT 2
添加所需的輸出
所需的輸出
Ticker Signal 1: 0001 False
所以我想創建一個函數來檢查信號是否True
或False
,然後更新在data.table中。
非常感謝!
您所定義的時間間隔的方式只是創建了「間隔」的一個因素的字符串,水平。間隔的'findInterval'輸入是一個非遞減的數字向量。 – Naumz
如果你想要一個'data.table'測試的答案,你應該發佈構建一個有用的測試用例的代碼。 –
你好,@Naumz,我編輯了原文,說清楚了。你能否提供任何提示?謝謝! – Bigchao