2

データが欠落しているベクトル(実際にはデータフレームから個々の列を取得しただけです)があります。欠落しているデータを、ベクター内の次に利用可能なデータ(または次のデータが利用できない場合は前のデータ)に置き換えたいと思います。たとえば、

data <- c(NA, NA, NA, NA, 5, NA, NA, 7, NA, NA)

になる必要があります

data <- c(5, 5, 5, 5, 5, 7, 7, 7, 7, 7)

これが不足しているデータを埋めるための非常に特殊な方法であることは知っていますが、これに対する洗練された解決策があるかどうか疑問に思いました。which(is.na(data))を使用して、欠落しているインデックスを取得し、データを使用してインデックスを取得しようとしましwhich(!is.na(data))たが、これら2つのインデックスのリストを使用してもベクトルを操作するには、多くの厄介なロジックが必要です。whichなんらかの形で誤用しているのか、それともこのロジックを適切に実行できる他の組み込み関数やパッケージがあるのか​​、疑問に思っていました。

ご協力ありがとうございました!

参考までに、以下のコードは、ベクトルが多数のNAで終わらない限り機能しますが、元のデータセットで機能させるにはロジックを追加する必要があります。

data <- c(NA, NA, NA, NA, 5, NA, NA, 7)
missingIndeces <- which(is.na(data))
filledIndeces <- which(!is.na(data))
if(length(missingIndeces) > 1) {
    for(j in 1:length(data)) {
        temp <- data[j:length(data)]
        filledData <- which(!is.na(temp))
        if(filledData[1] > 1)
            data[j] <- temp[filledData[1]]
    }
}
4

2 に答える 2

7

多分使うna.locf…?

library(zoo)
na.locf(na.locf(zoo(data),fromLast = TRUE,na.rm = FALSE),na.rm = FALSE)
 1  2  3  4  5  6  7  8  9 10 
 5  5  5  5  5  7  7  7  7  7 
于 2012-10-08T22:46:26.467 に答える