次のスクリプトを使用して、NaN
値をゼロに置き換えようとしました。
rapply( data123, f=function(x) ifelse(is.nan(x),0,x), how="replace" )
# [31] 0.00000000 -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
NaN値はゼロであることが示されていましたが、データフレームの名前を入力して確認しようとすると、値はまだNaNのままでした。
data123$contri_us
# [31] NaN -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
rapply
コマンドが実際にデータフレームで調整を適用していたのか、示されているように値を置き換えただけなのかわかりません。
NaN
値を実際にゼロに変更する方法はありますか?
is.nan
とは異なり、is.na
にはデータフレームのメソッドが実際にはないようです。それで、それを修正しましょう!
is.nan.data.frame <- function(x)
do.call(cbind, lapply(x, is.nan))
data123[is.nan(data123)] <- 0
実際、Rでは、この操作は非常に簡単です。
マトリックス 'a'にNaNが含まれている場合、次のコードを使用して0に置き換えるだけです。
_a <- matrix(c(1, NaN, 2, NaN), ncol=2, nrow=2)
a[is.nan(a)] <- 0
a
_
データフレーム 'b'にNaNが含まれている場合、次のコードを使用して0に置き換えるだけです。
_#for a data.frame:
b <- data.frame(c1=c(1, NaN, 2), c2=c(NaN, 2, 7))
b[is.na(b)] <- 0
b
_
マトリックスの場合の_is.nan
_とデータフレームの場合の_is.na
_の違いに注意してください。
やること
_#...
b[is.nan(b)] <- 0
#...
_
bはデータフレームであるため、Error in is.nan(b) : default method not implemented for type 'list'
を生成します。
注:小さいが混乱を招くタイプミスのために編集
以下はあなたが望むことをするべきです:
x <- data.frame(X1=sample(c(1:3,NaN), 200, replace=TRUE), X2=sample(c(4:6,NaN), 200, replace=TRUE))
head(x)
x <- replace(x, is.na(x), 0)
head(x)