1

Vertica データベースに接続して、大量のデータを取得しています。データセットのすべての列に NA があります。しかし、特定の列からNAを見つけて0に置き換えたい.

どうすればいいですか?

ありがとう !

4

1 に答える 1

2

私のコメントを拡張して回答にするために、最小限の再現可能な例を次に示します。

set.seed(1)
mydf <- as.data.frame(matrix(sample(c(1:2, NA), 50, replace = TRUE), ncol = 10))
mydf
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  1 NA  1  2 NA  2  2 NA NA  NA
# 2  2 NA  1 NA  1  1  2 NA  2   1
# 3  2  2 NA NA  2  2  2  1 NA   2
# 4 NA  2  2  2  1 NA  1 NA  2  NA
# 5  1  1 NA NA  1  2 NA  2  2  NA

ここで、NA「0」に置き換えたいが、列 1、3、7、および 8 のみである場合は、次を使用できます。

mydf[c(1, 3, 7, 8)][is.na(mydf[c(1, 3, 7, 8)])] <- 0
mydf
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  1 NA  1  2 NA  2  2  0 NA  NA
# 2  2 NA  1 NA  1  1  2  0  2   1
# 3  2  2  0 NA  2  2  2  1 NA   2
# 4  0  2  2  2  1 NA  1  0  2  NA
# 5  1  1  0 NA  1  2  0  2  2  NA

列の数値インデックス位置の代わりに、列名のベクトルを使用できます (数値位置よりも安全です)。さらに、作業中の列名またはインデックス位置のベクトルが別のベクトルに格納されていると、コードが簡単になる可能性があります。これらの概念の両方を以下に示します。ここではNA、変数「V2」、「V4」、および「V5」の値を「-999」に置き換えます。

changeMe <- c("V2", "V4", "V5")
mydf[changeMe][is.na(mydf[changeMe])] <- -999
mydf
#   V1   V2 V3   V4   V5 V6 V7 V8 V9 V10
# 1  1 -999  1    2 -999  2  2  0 NA  NA
# 2  2 -999  1 -999    1  1  2  0  2   1
# 3  2    2  0 -999    2  2  2  1 NA   2
# 4  0    2  2    2    1 NA  1  0  2  NA
# 5  1    1  0 -999    1  2  0  2  2  NA
于 2013-09-19T16:37:08.513 に答える