2017-04-18 2 views
1

주식 및 날짜 데이터 프레임이 있습니다. "다음 날짜"열을 추가하고 싶습니다. 어떻게해야합니까? 사람이 읽을 수있는 형태에서R 데이터 프레임에 다음 날짜 열을 추가하는 방법

df = data.frame(ticker = c("BHP", "BHP", "BHP", "BHP", "ANZ", "ANZ", "ANZ"), date = c("1999-05-31", "2000-06-30", "2001-06-29", "2002-06-28", "1999-09-30", "2000-09-29", "2001-09-28")) 
df$date = as.POSIXct(df$date) 

:

데이터는 이것이다

ticker | date 
----------------- 
BHP  | 1999-05-31 
BHP  | 2000-06-30 
BHP  | 2001-06-29 
BHP  | 2002-06-28 
ANZ  | 1999-09-30 
ANZ  | 2000-09-29 
ANZ  | 2001-09-28 

내가 원하는 것은 다음 날짜 열을 추가하는 것입니다

ticker | date  | next_date 
------------------------------------ 
BHP  | 1999-05-31 | 2000-06-30 
BHP  | 2000-06-30 | 2001-06-29 
BHP  | 2001-06-29 | 2002-06-28 
BHP  | 2002-06-28 | NA   # (or some default value) 
ANZ  | 1999-09-30 | 2000-09-29 
ANZ  | 2000-09-29 | 2001-09-28 
ANZ  | 2001-09-28 | NA 

답변

4
library(dplyr) 
df %>% 
group_by(ticker) %>% 
mutate(next_date = lead(date)) 
1

ave부터까지 사용할 수 있습니다.이

df$next_date <- with(df, ave(as.Date(date), ticker, FUN = function(x) c(x[-1], NA))) 
df$next_date 
#[1] "2000-06-30" "2001-06-29" "2002-06-28" NA   "2000-09-29" "2001-09-28" NA  

해야 할 일 아니면 data.table

library(data.table) 
setDT(df)[, next_date := shift(date, type = "lead"), by = ticker] 
+0

당신이 개 솔루션의 첫 번째는 않습니다 꽤 작업을 할 수 있습니다. 귀하의 data.table 솔루션은 정상적으로 작동합니다. – lebelinoz

+0

@lebelinoz 나를 위해, 당신이 보여준 예제를 사용하여 잘 작동합니다. 사실, 나는'c (x [-1], NA)'를 의미했지만 그것을 잊어 버렸다. – akrun

+0

@lebelinoz 예, 편집했습니다. 원래는 복사/붙여 넣기를 한 다음 내 시스템에서 변경했지만 코드를 업데이트하는 것을 잊었습니다. – akrun

관련 문제