2016-10-26 37 views
0

我有以下列格式數據:ř數據幀:從下一行受試者獲得值到標準

quotes <- read.csv(text = " 
id,ts,origin,product,bid,ask,nextts 
1,2016-10-18 20:20:54.733,SourceA,Dow,1.09812,1.0982, 
2,2016-10-18 20:20:55.093,SourceA,Ftse,7010.5,7011.5, 
3,2016-10-18 20:20:55.149,SourceA,Dow,18159.0,18161.0, 
4,2016-10-18 20:20:55.871,SourceA,Ftse,18159.0,18161.0,") 

我怎樣才能填充列「nextts」與TS的下一行中的值,其中源是相同和產品是一樣的嗎?從本質上講,加入數據本身(視其是相同的產品和來源)並捕獲ts的價值?

我找到了以下答案,但這是一個嚴格的沒有任何標準的領先/滯後。

Return next row in a dataframe R

+0

你的數據不是很可讀,怎麼樣使它更容易在美國和張貼'dput(引號)'。 –

回答

2

首先確保ts是字符或POSIXct而不是通過因子顯式轉換它如這裏所示,或者使用as.is=TRUE參數read.csv。然後使用帶指示功能的ave按組移位。

quotes$ts <- as.character(quotes$ts) 
transform(quotes, nextts = ave(ts, origin, product, FUN = function(x) c(x[-1], NA))) 

,並提供:

id      ts origin product   bid  ask     nextts 
1 1 2016-10-18 20:20:54.733 SourceA  Dow  1.09812  1.0982 2016-10-18 20:20:55.149 
2 2 2016-10-18 20:20:55.093 SourceA Ftse 7010.50000 7011.5000 2016-10-18 20:20:55.871 
3 3 2016-10-18 20:20:55.149 SourceA  Dow 18159.00000 18161.0000      <NA> 
4 4 2016-10-18 20:20:55.871 SourceA Ftse 18159.00000 18161.0000      <NA>