有没有办法绕过for/loop
替换NA
中data.table
的特定列中的每个(缺失值)R
,并使用从中取样的值该专栏前面的最后一次10
non-NA
观察结果?
我试图这样做而不需要for loop
。
请 - 向上
你是对的(Akrun)但是因为这是一次性的事情,我可以手动做这些..这是一个例子
Date Temp
1/26/2013 41
1/27/2013 40
1/28/2013 48
1/29/2013 25
1/30/2013 21
1/31/2013 28
1/1/2013 38
1/2/2013 36
1/3/2013 31
1/4/2013 32
1/5/2013 39
1/6/2013 38
1/7/2013 40
1/8/2013 NA
1/9/2013 NA
1/10/2013 NA
1/11/2013 NA
1/12/2013 NA
1/13/2013 31
1/14/2013 30
1/15/2013 31
1/16/2013 38
1/17/2013 45
1/18/2013 46
1/19/2013 51
1/20/2013 47
我想通过从以前的temps历史中抽样来替换NA
值。我最终写了一个for循环工作正常...但是搜索更加计算效率的代码
以下是我的功能
i<-c()
a.obs<-c()
x<-c()
Fun_missingtemp <- function(x){
for(i in 1:length(x$Tavg)){
while (is.na(x$Tavg[i])){
a.obs<-x$Tavg[(i-11):i-1]
x[i, Tavg:=sample(a.obs, 1, replace=TRUE)]
}
}
x
}
答案 0 :(得分:0)
base R
解决方案
indx <- which(is.na(df1$Val))
df1$Val[indx] <- vapply(indx, function(i) {
x <- tail(na.omit(df1$Val[1:i]),10)
if(length(x)>0) sample(x,1) else NA}, 0)
set.seed(95)
df1 <- data.frame(Col=LETTERS[1:20],Val=sample(c(NA, 1:5), 20,
replace=TRUE), stringsAsFactors=FALSE)