2014-04-18 30 views
0

假設我的代碼訪問特定行。如何手動訪問滯後行?在這個例子中,我的代碼挑選了日期爲「03.01.2010」的行。基於此,我如何訪問例如以下行。根據R中給定的行訪問滯後行

date <- c("01.01.2010","02.01.2010","03.01.2010","04.01.2010","07.01.2010") 
ret <- c(1.1,1.2,1.3,1.4,1.5) 

mydf <- data.frame(date, ret) 
mydf 

#   date ret 
# 1 01.01.2010 1.1 
# 2 02.01.2010 1.2 
# 3 03.01.2010 1.3 
# 4 04.01.2010 1.4 
# 5 07.01.2010 1.5 

certaindate <- "03.01.2010" 

mydf[mydf$date %in% certaindate, "ret"] # this is an important line in my code and I want to keep it there! 

我覺得像

mydf[mydf$date %in% certaindate +1, "ret"] 

會做的伎倆,但它沒有..

+0

嘗試'是myDF [其中(myDF上的$ date%在%certaindate)+1,] $ ret'。如果被引用的行是最後一行,會發生什麼? – jlhoward

回答

2

所以此工程:

mydf[mydf$date %in% certaindate, "ret"] 
# [1] 1.3 
mydf[which(mydf$date %in% certaindate)+1,]$ret 
# [1] 1.4 

功能which(...)返回指標所有符合要求的元素條件。然後,您可以添加1.

您的代碼正在返回一個邏輯向量(T/F)。加1表示將所有邏輯強制爲0或1,給出一個1或2的數字向量,然後用它來索引df

0

這是很容易與dplyr::lag()做到:

library(dplyr) 

df <- data.frame(
    date = as.Date(c("2010-01-01", "2010-01-02", "2010-01-03", "2010-01-04", 
    "2010-01-07")), 
    ret = c(1.1, 1.2, 1.3, 1.4, 1.5) 
) 
df 
#>   date ret 
#> 1 2010-01-01 1.1 
#> 2 2010-01-02 1.2 
#> 3 2010-01-03 1.3 
#> 4 2010-01-04 1.4 
#> 5 2010-01-07 1.5 

lag(df$date) 
#> [1] NA   "2010-01-01" "2010-01-02" "2010-01-03" "2010-01-04" 

mutate(df, last_date = lag(date)) 
#>   date ret last_date 
#> 1 2010-01-01 1.1  <NA> 
#> 2 2010-01-02 1.2 2010-01-01 
#> 3 2010-01-03 1.3 2010-01-02 
#> 4 2010-01-04 1.4 2010-01-03 
#> 5 2010-01-07 1.5 2010-01-04