[英]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.