my.df <- data.frame(Vehid = rep(c(2,3), each=25), frameid = rep(c(1:25), 2), roll.corr = rep(c(rep(0.3,3), 0.4,0.6, rep(0.7,12), 0.6,0.5,0.5,0.4, rep(NA,4)),2),
framestart = rep(c(1:21, rep(NA, 4)),2), frameend = rep(c(5:25, rep(NA,4)),2))
对于vehid
我希望获得NA
之前的最后一个值,例如在这种情况下为0.4,并用该值替换所有NA
。
如果数据框只有1 vehid
,则后续工作:
my.df$roll.corr[is.na(my.df$roll.corr)] <- my.df$roll.corr[head(which(match(my.df$roll.corr, NA)==1),1)-1]
必须有一个简单的方法来做到这一点,但我只能在上面做。现在,对于多个vehid
我尝试使用ddply
后将上面定义为函数如下,但它没有工作:
my.func <- function(b){
b[is.na(b)] = b[head(which(match(b,NA)==1),1)-1]
}
ddply(my.df, .(Vehid), my.func(roll.corr))
它给出了object roll.corr not found
。
my.df <- data.frame(Vehid = rep(c(2,3), each=25), frameid = rep(c(1:25), 2), roll.corr = rep(c(rep(0.3,3), 0.4,0.6, rep(0.7,12), 0.6,0.5,0.5,0.4, rep(0.4,4)),2),
framestart = rep(c(1:21, rep(NA, 4)),2), frameend = rep(c(5:25, rep(NA,4)),2))
请提出一个简单的解决方案。
答案 0 :(得分:0)
最直接的方法可能是使用“zoo”包中的na.locf
。
您应该可以执行以下操作:
library(zoo)
na.locf(my.df$roll.corr)
# [1] 0.3 0.3 0.3 0.4 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7
# [17] 0.7 0.6 0.5 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.4 0.6 0.7 0.7
# [33] 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.6 0.5 0.5 0.4 0.4 0.4
# [49] 0.4 0.4