簡體   English   中英

用下一個非NA值的平均值替換NA

[英]Replacing NAs with mean of next non-NA value

我有一個帶有小時值的data.frame。 有時我會錯過幾個小時的值,並想用第一個非缺失值來填充該值,該值由缺失值+1(非缺失值的計數)組成:

即(非常簡化的版本)

 c(1,NA,NA,NA,4,NA,2,1)

我想要的是:

c(1,(4/4),(4/4),(4/4),(4/4),(2/2),(2/2),1)

將會是:

c(1,1,1,1,1,1,1,1,1)

當前,我將動物園與na.locf一起使用,它將第一個非na替換為所有NA:對於我們的示例,這意味着:

c(1,4,4,4,4,2,2,1)

謝謝

您需要結合na.locfrle

library(zoo)

ifelse(is.na(x) | is.na(c(0, head(x,-1))), 
       with(rle(na.locf(x, fromLast=T)), rep(values/lengths, lengths)), 
       x)
[1] 1 1 1 1 1 1 1 1

它也適用於:

x = c(1, NA, 5, 3, 3, NA, NA, 1)
#[1] 1.0000000 2.5000000 2.5000000 3.0000000 3.0000000 0.3333333 0.3333333 0.3333333

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM