有条件地填充R dataframe列,偏离参考列

时间:2012-01-30 18:03:21

标签: r conditional fill

我有一个名为prices_df的数据框,我根据同一个df中另一列的内容添加了一个额外的列并有条件地填充了1

prices_df$itd_1 <- c(NA)
prices_df$itd_1 <- with( prices_df , ifelse(V2.1==1 , 1, NA) )

因此在最后一列中给出了1

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,1
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA

然而,我还想做的是偏移这个条件填充,使得输出将比例如参考列后两行的列中的1,或者可能是x行更早或更晚,例如< / p>

2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,1

如何调整给定代码以实现此偏移条件填充?

1 个答案:

答案 0 :(得分:1)

最好的方法是:

  1. 创建一个时间序列对象(我更喜欢动物园)
  2. 使用滞后(或调用偏移量)创建额外列
  3. 将所有内容合并在一起

    prices_df <- read.table(text="2005-11-16,NA,NA,NA,NA,1,NA,NA,NA,NA,NA,NA,NA
    2005-11-17,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
    2005-11-18,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA", header=F, sep=",")
    
    library(zoo)
    prices_df.zoo <-zoo(prices_df[,-1],as.Date(prices_df[,1]))
    itd_1 <- lag(with( prices_df.zoo , ifelse(V6==1 , 1, NA) ),-2) #lag = -2
    prices_df.zoo <-merge(prices_df.zoo, itd_1)
    
    > prices_df.zoo
               V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 itd_1
    2005-11-16 NA NA NA NA  1 NA NA NA  NA  NA  NA  NA    NA
    2005-11-17 NA NA NA NA NA NA NA NA  NA  NA  NA  NA    NA
    2005-11-18 NA NA NA NA NA NA NA NA  NA  NA  NA  NA     1