「#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
(*tmp*
、list、value = "NULL")のエラー:新しい列は既存の列の後に穴を残します
問題は、私のインデックスがdata.frameをベクトルとして処理していることですが、replace関数はそれを何らかの形で別の方法で処理していることですが、問題が何であるかわかりませんか?
NULLは、実際には「欠落」ではなく「何もない」ことを意味するため、実際の値の代わりになることはできません。欠落しているRの場合、NAを使用します。
Is.naの置換メソッドを使用して、選択した要素を直接更新できます。これは論理的な結果で機能します。 (for 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"に一致することはありません。
何故なの
x$col[is.na(x$col)]<-value
?
データフレームを変更する必要はありません
Replace関数はベクトルを想定しており、data.frameを提供しています。
現在使用している文字値の代わりに、NA
と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
を読むことをお勧めします。