R: Fill Internal NA

fill.internal.NA {dplR} | R Documentation

## Fill Internal NA

### Description

This function fills internal `NA` values (i.e., those with numeric data above and below a small data gap) in each column of a `data.frame` such as a data set of ring widths as produced by `read.rwl`.

### Usage

    fill.internal.NA(x, fill = c("Mean", "Spline", "Linear"))

### Arguments

`x` | a `data.frame` of ring widths with `row.names(x)` containing years and `names(x)` containing each series ID such as produced by `read.rwl`
`fill` | a `numeric` value (e.g., `0`) or a `character` string of `"Mean"`, `"Spline"`, or `"Linear"`. Defaults to `"Mean"`.

### Details

There are occasionally data gaps within a tree-ring series. Some of the functions in dplR will fail when an internal `NA` is encountered (e.g. `ffcsaps`). This function fills internal `NA` values with either a given numeric value (e.g., `0`) or through crude imputation. The latter can be calculated as the mean of the series (`fill="Mean"`) or calculated by fitting a cubic spline (`fill="Spline"`) using the `spline` function or calculated by linear approximation (`fill="Linear"`) using the function `approx`.

Editorial: Having internal `NA` in a tree-ring series is often bad practice and filling those values should be done with caution. For instance, some users code missing rings as `NA` instead of `0`. And missing values (i.e., `NA`) are sometimes present in maximum latewood density data when the rings are small. A common, but not recommended, practice is to leave stretches of `NA` values in places where it has been impossible to accurately measure rings (perhaps because of a break in the core). It is often better to treat that core as two separate series (e.g., "01A" and "01B" rather than have internal `NA` values. As with all processing, the analyst should make a decision based on their experience with the wood and not rely on software to make a choice for them!

### Value

A `data.frame` with `colnames(x)` and `rownames(x)`. Internal `NA`s filled as above.

### Author(s)

Andy Bunn. Patched and improved by Mikko Korpela.

### See Also

`spline`, `approx`

### Examples

    library(graphics)
    library(stats)
    foo <- data.frame(x1=c(rnorm(5), NA, NA, rnorm(3)),
                      x2=c(rnorm(10)),
                      x3=c(NA, NA, rnorm(3), NA, rnorm(4)),
                      x4=c(NA, NA, rnorm(3), NA, rnorm(3), NA),
                      x5=c(NA, NA, rnorm(8)),
                      x6=c(NA, rnorm(9)),
                      x7=c(NA, rnorm(5), NA, rnorm(3)),
                      x8=c(rnorm(8), NA, NA),
                      x9=c(rnorm(5), NA, rnorm(3), NA))
    row.names(foo) <- 1901:1910
    class(foo) <- c("rwl","data.frame")
    fill.internal.NA(foo, fill=0)

    bar <- fill.internal.NA(foo, fill="Spline")
    baz <- fill.internal.NA(foo, fill="Linear")

    ## note differences in method "Spline" vs. "Linear"
    yrs <- time(foo)
    plot(yrs, foo$x7, type="b", lwd=3)
    lines(yrs, bar$x7, col="red", lwd=2)
    lines(yrs, baz$x7, col="green", lwd=1)

[Package dplR version 1.7.2 Index]