我有一个包含两列的数据框:Tick和Bid。这是金融工具的刻度数据。如果Tick列的值已经上移/下移。出价列保留当前出价。这是一个例子:
Test <- data.frame(Tick=c(NA, NA, NA ,NA, NA , "1", NA, NA, NA,
NA, NA, "-1",NA, NA),
Bid=c("393.75", "393.75" ,"393.75" ,"394", "394",
NA,"394" ,"394","394","394","393.75",
NA, "393.75", "393.75"))
我想创建一个我称之为Best_Bid_Ex
的变量,该变量在发生勾号事件(is.na(Test$Tick == FALSE)
)后保留第一个价格的值,并在下一个事件时使用新的出价重置。
Test$Best_Bid_Ex <- c("393.75", "393.75" ,"393.75" ,"393.75",
"393.75", NA,"394" ,"394","394","394","394", NA, "393.75", "393.75")
我尝试了不同的索引技术,但我无法正常工作。
答案 0 :(得分:3)
在'data.table'的devel版本中,有一个方便的函数yield
,用于生成rleid
列以进行分组。
我们将'data.frame'转换为'data.table'(run-length_type_id
)。在逻辑索引(setDT(Test)
)上应用rleid
以获取每组“TRUE / FALSE / TRUE”组的数字组,然后创建“Best_Bid_Ex”作为“出价”列的第一个值( !is.na(Tick)
)按Bid[1L]
的数字分组分组。
rleid
安装devel版本的说明是here