如何使用日期格式在数据框中写入条件

How to use date formats to write conditions in data frames

我的代码在 运行 上花费了大量时间,我遇到了一个问题。我有一个大约 23000 列和 600 行的数据框,它遵循以下原则:

date <- c(30032015,30042015,31052015,30062015,31072015,31082015,30092015)
AAPL <- c(10,NA,NA,10,NA,NA,20)
MSFT <- c(10,NA,NA,30,NA,NA,25)
sales <- data.frame (date,AAPL,MSFT)
sales$date <- strptime (sales$date, format="%d%m%Y")

我希望 4 月和 5 月的值等于 3 月的值,并且相对于 7 月和 8 月相对于 6 月的值相同。

我做的是这个

sales [is.na(sales)] <- 0

for (i in 1:6){
for (j in 2:3){
sales[i,j] <- ifelse(sales[i,j]>0,sales[i,j],ifelse(sales[i-1,j]>0,sales[i-
1,j],ifelse(sales[i-2,j]>0,sales[i-2,j],NA)))
}}

然而,对于一个大数据框架来说,需要花费很多时间。难道不能以某种方式说第 4 个月和第 5 个月的值等于第 3 个月等的值吗?

提前致谢

您可能需要 zoo 包中的 na.locf() 函数。它携带最后的观察值以替换 na 值。

require(zoo)
sales[,2:3] <- apply(sales[,2:3],2,na.locf)