NA
と同じではありません"NA"
がR
、お気に入りのスプレッドシートプログラムによってそのように解釈される可能性があります。は(数値ではなく)のようなNA
特別な値です。私が正しく理解している場合、あなたの解決策の1つは、北米を表す列の「NA」値を別のものに置き換えることです。この場合、次のことができるはずです...R
NaN
df$col[ df$col == "NA" ] <- "NorthAmerica"
これは、「NA」値が実際には文字列であると想定しています。is.na()
文字列の場合は値を返さないため、機能しdf$col[ is.na(df$col) ] <- 0
ません。
NAと「NA」の違いの例:
x <- c( 1, 2, 3 , "NA" , 4 , 5 , NA )
> x[ !is.na(x) ]
[1] "1" "2" "3" "NA" "4" "5"
> x[ x == "NA" & !is.na(x) ]
[1] "NA"
これを解決する方法
NA
「NA」とすべてのsを最初のdfのままにしておきたいと思いますが、2番目のdfはすべて、 「NotAvailable」のような変更からNA
形成されます。rbind.fill()
あなたはそのようにこれを達成することができます...
df1 <- data.frame( col = rep( "NA" , 6 ) , x = 1:6 , z = rep( 1 , 6 ) )
df2 <- data.frame( col = rep( "SA" , 2 ) , x = 1:2 , y = 5:6 )
df <- rbind.fill( df1 , df2 )
temp <- df [ (colnames(df) %in% colnames(df2)) ]
temp[ is.na( temp ) ] <- "NotAvailable"
res <- cbind( temp , df[ !( colnames(df) %in% colnames(df2) ) ] )
#df has real NA values in column z and column y. We just want to get rid of y's
df
# col x z y
# 1 NA 1 1 NA
# 2 NA 2 1 NA
# 3 NA 3 1 NA
# 4 NA 4 1 NA
# 5 NA 5 1 NA
# 6 NA 6 1 NA
# 7 SA 1 NA 5
# 8 SA 2 NA 6
#res has "NA" strings in col representing "North America" and NA values in z, whilst those in y have been removed
#More generally, any NA in df1 will be left 'as-is', whilst NA from df2 formed using rbind.fill will be converted to character string "NotAvilable"
res
# col x y z
# 1 NA 1 NotAvailable 1
# 2 NA 2 NotAvailable 1
# 3 NA 3 NotAvailable 1
# 4 NA 4 NotAvailable 1
# 5 NA 5 NotAvailable 1
# 6 NA 6 NotAvailable 1
# 7 SA 1 5 NA
# 8 SA 2 6 NA