我有一个名为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
如何调整给定代码以实现此偏移条件填充?
答案 0 :(得分:1)
最好的方法是:
将所有内容合并在一起
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