2016-10-04 32 views
0

保留了以前的值我有一個火花數據框,看起來像這樣:SparkR - 另一列

id  dates value 
1 11 2013-11-15 10 
2 11 2013-11-16 15 
3 22 2013-11-15 20 
4 22 2013-11-16 21 
5 22 2013-11-17  3 

我想從每個ID之前的日期保留價值。

最後的結果應該是這樣的:

id  dates value prev_value 
1 11 2013-11-15 10  NA 
2 11 2013-11-16 15  10 
3 22 2013-11-15 20  NA 
4 22 2013-11-16 21  20 
5 22 2013-11-17  3  21 

this question該解決方案將不會由於種種原因工作。

我將不勝感激幫助!

+0

不是一個SparkR函數,但窗口函數將是你在找什麼(例如http://stackoverflow.com/questions/34885981/sparkr-window功能) – David

+0

@大衛,我無法找到一些東西這將適用於我的情況,但如果您可以提出建議 - 我會很樂意接受您的答案。乾杯 –

回答

1

所以用它玩了一會兒後,這裏就是我找到了解決方法:

首先,這裏的例子DF

id<-c(11,11,22,22,22) 
dates<-as.Date(c('2013-11-15','2013-11-16','2013-11-15','2013-11-16','2013-11-17'), "%Y-%m-%d") 
value <- c(10,15,20,21,3) 

example<-as.DataFrame(data.frame(id=id,dates=dates, value)) 

我複製的例子DF 1天添加到原來的日期,然後重命名列

example_p <- example 
example_p$dates <- date_add(example_p$dates, 1) 
colnames(example_p) <- c("id", "dates", "prev_value") 

最後,我合併新DF原來的一個

result <- select(merge(example, example_p, by = intersect(names(example),names(example_p)) 
       , all.x = T), c("id_x", "dates_x", "value", "prev_value")) 

showDF(result) 

+----+----------+-----+----------+ 
|id_x| dates_x|value|prev_value| 
+----+----------+-----+----------+ 
|22.0|2013-11-15| 20.0|  null| 
|11.0|2013-11-15| 10.0|  null| 
|11.0|2013-11-16| 15.0|  10.0| 
|22.0|2013-11-16| 21.0|  20.0| 
|22.0|2013-11-17| 3.0|  21.0| 
+----+----------+-----+----------+ 

顯然,這是某種笨拙,我會很樂意將任何人都可以建議的解決方案,比這更快的工作。