1

重複の可能性:
NA を最新の非 NA 値に置き換える

各列の以前の値を使用して不足している情報を埋めるにはどうすればよいですか?

Date.end   Date.beg   Pollster Serra.PSDB
2012-06-26 2012-06-25  Datafolha       31.0
2012-06-27       <NA>       <NA>         NA
2012-06-28       <NA>       <NA>         NA
2012-06-29       <NA>       <NA>         NA 
2012-06-30       <NA>       <NA>         NA
2012-07-01       <NA>       <NA>         NA
2012-07-02       <NA>       <NA>         NA
2012-07-03       <NA>       <NA>         NA
2012-07-04       <NA>       Ibope        22
2012-07-05       <NA>       <NA>         NA
2012-07-06       <NA>       <NA>         NA
2012-07-07       <NA>       <NA>         NA
2012-07-08       <NA>       <NA>         NA
2012-07-09       <NA>       <NA>         NA
2012-07-10       <NA>       <NA>         NA
2012-07-11       <NA>       <NA>         NA
2012-07-12 2012-07-09     Veritá       31.4
4

1 に答える 1

2

それが最善の方法かどうかはわかりません。おそらく、まさにその機能を備えたパッケージがあります。次のアプローチは、最高のパフォーマンスを発揮するアプローチではない可能性がありますが、確かに機能し、中小規模のデータセットには適しているはずです。非常に大きなデータセット(100万行以上など)に適用する場合は注意が必要です。

fillNAByPreviousData <- function(column) {
    # At first we find out which columns contain NAs
    navals <- which(is.na(column))
    # and which columns are filled with data.
    filledvals <- which(! is.na(column))

    # If there would be no NAs following each other, navals-1 would give the
    # entries we need. In our case, however, we have to find the last column filled for
    # each value of NA. We may do this using the following sapply trick:
    fillup <- sapply(navals, function(x) max(filledvals[filledvals < x]))

    # And finally replace the NAs with our data.
    column[navals] <- column[fillup]
    column
}

テストデータセットを使用した例を次に示します。

set.seed(123)
test <- 1:20
test[floor(runif(5,1, 20))] <- NA

> test
 [1]  1  2  3  4  5 NA  7 NA  9 10 11 12 13 14 NA 16 NA NA 19 20

> fillNAByPreviousData(test)
 [1]  1  2  3  4  5  5  7  7  9 10 11 12 13 14 14 16 16 16 19 20
于 2012-11-22T19:43:03.867 に答える