13

「#N/A」を含む data.frame の要素を「NULL」に置き換えようとしていますが、問題が発生しています。

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8))

indices_of_NAs <- which(foo == "#N/A") 

replace(foo, indices_of_NAs, "NULL")

[<-.data.frame( 、リスト、値 = "NULL") のエラー*tmp*: 新しい列は既存の列の後に穴を残す

問題は、私のインデックスが data.frame をベクトルとして扱っていることだと思いますが、replace 関数は何らかの方法でそれを別の方法で扱っていますが、何が問題なのかわかりませんか?

4

3 に答える 3

19

NULL は実際には「欠落」ではなく「何もない」ことを意味するため、実際の値の代わりになることはありません。欠落している R は NA を使用するためです。

is.na の置換メソッドを使用して、選択した要素を直接更新できます。これは論理的な結果で機能します。(インデックスに which を使用すると、is.na でのみ機能します。[ を直接使用すると、エラーの原因であるリスト アクセスが呼び出されます)。

foo <- data.frame("day"= c(1, 3, 5, 7), "od" = c(0.1, "#N/A", 0.4, 0.8)) 
NAs <- foo == "#N/A"

## by replace method
is.na(foo)[NAs] <- TRUE

 ## or directly
 foo[NAs] <- NA

しかし、c() で作成されたときに強制強制によって od 列の文字列 (実際にはデフォルトで要素) を既に処理しており、列を個別に処理する必要がある場合があります。たとえば、数値列が文字列「#N/A」に一致することはありません。

于 2010-05-04T17:26:16.457 に答える
12

なぜだめですか

x$col[is.na(x$col)]<-value


データフレームを変更する必要はありません

于 2010-05-28T02:57:23.510 に答える
1

置換関数はベクトルを想定しており、data.frame を提供しています。

現在使用している文字値の代わりにNAandを実際に使用するようにしてください。NULLそうしないと、R のすべての機能を利用して欠損値を処理することができなくなります。

編集

適用関数を使用するか、次のようにすることができます。

foo <- data.frame(day= c(1, 3, 5, 7), od = c(0.1, NA, 0.4, 0.8))
idx <- which(is.na(foo), arr.ind=TRUE)
foo[idx[1], idx[2]] <- "NULL"

NULLこの場合、長さがゼロであるため、実数を割り当てることはできません。と の違いを理解することが重要なので、NAとを読むことをNULLお勧めします。?NA?NULL

于 2010-05-04T16:51:18.393 に答える