1

列と列ヘッダーの数が異なる2つのデータフレームを結合しようとしています。ただし、を使用してそれらを結合した後rbind.fill()、結果のファイルは空のセルを。で埋めましたNA

列の1つに「NA」(北米の場合)としても表されるデータが含まれているため、これは非常に不便です。そのため、それをcsvにインポートすると、スプレッドシートでそれらを区別できません。

私に次の方法はありますか?

  1. rbind.fill空のセルにNAを入力せずに関数を使用する

また

  1. 列を変更してNA値を置き換えます*

*私はブログを精査し、最も人気のある2つの解決策を試しました。

df$col[is.na(df$col)] <- 0, #it does not work
df$col = ifelse(is.na(df$col), "X", df$col), #it changes all the characters to numbers, and ruins the column

何かアドバイスがあれば教えてください!私は(残念ながら)共有することはできませんが、dfどんな質問にも喜んで答えます!

4

2 に答える 2

3

NAと同じではありません"NA"R、お気に入りのスプレッドシートプログラムによってそのように解釈される可能性があります。は(数値ではなく)のようなNA特別な値です。私が正しく理解している場合、あなたの解決策の1つは、北米を表す列の「NA」値を別のものに置き換えることです。この場合、次のことができるはずです...RNaN

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
于 2013-03-13T21:11:14.723 に答える
1

NA を含むデータフレームがあり、それらをすべて置き換えたい場合は、次のようなことができます。

df[is.na(df)] <- -999

これにより、すべての NA が 1 回で処理されます。

単一の列でのみ操作したい場合は、次のようなことができます

df$col[which(is.na(df$col))] <- -999
于 2013-03-13T21:13:53.593 に答える