57

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値をゼロに変更する方法はありますか?

4

4 に答える 4

38

実際、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
#...

yields: Error in is.nan(b) : default method not implemented for type 'list'b はデータ フレームであるためです。

注: 小さくても紛らわしいタイプミスを編集しました

于 2015-07-02T13:55:48.430 に答える
26

以下はあなたが望むことをするはずです:

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)
于 2013-08-09T07:45:42.957 に答える