繁体   English   中英

用最后10个非NA观测值中的值样本替换特定列中的每个NA

[英]Replace every NA in a specific column with a value sample from the last 10 non-NA obs

有没有一种方法可以避免for/loop替换R data.table的特定列中的每个(缺失值) NA ,并使用该列中data.table的最后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

我想通过从以前的温度历史记录中采样来替换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
}

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM