特定の値をNAに置き換える(またはNAを特定の値に置き換える)

国土数値情報からダウンロードしたメッシュデータの中にはunknownという値が含まれており、 各フィールドはキャラクターとして認識され、意図している数値型として認識されていない事例に遭遇した。 皆さんどうしてるんですかね?

とりあえずunknownという値を置き換えるべくネット検索したところ、 gdataパッケージに便利なものがあったのでメモ。

詳細はpackage Vignetteに詳しい

library(gdata)
xNum <- c(0, 6, 0, 7, 8, 9, NA)
xNum
[1]  0  6  0  7  8  9 NA

デフォルトではNAがunknownとして認識される。

isUnknown(x = xNum)
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

0をunknownとする場合は以下のようにする。

isUnknown(x = xNum, unknown = 0)
[1]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE

複数のunknownとして指定する場合には以下のようにする。

isUnknown(x = xNum, unknown = c(0, NA))
[1]  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE

NAを置き換える場合にはNAToUnknown()関数を利用する。

NAToUnknown(x = xNum, unknown = 999)
[1]   0   6   0   7   8   9 999

unknownをNAに置き換える場合はunknownToNA()関数を利用する

unknownToNA(x = xNum, unknown=6)
[1]  0 NA  0  7  8  9 NA
dNum <- data.frame(
  a = c(1, 3, "unknown"),
  b = c(4, 5, NA)
)

データフレームに対しても利用できる。

isUnknown(x = dNum, unknown = NA)
      a     b
1 FALSE FALSE
2 FALSE FALSE
3 FALSE  TRUE
NAToUnknown(x = dNum, unknown = 999)
        a   b
1       1   4
2       3   5
3 unknown 999
unknownToNA(dNum, unknown = c("unknown"))
     a  b
1    1  4
2    3  5
3 <NA> NA