How to replace NaN value with zero in a huge data frame?

前端 未结 3 835
生来不讨喜
生来不讨喜 2020-11-28 04:58

I tried to replace NaN values with zeros using the following script:

rapply( data123, f=function(x) ifelse(is.nan(x),0,x), how=\"replace\" )
#          


        
相关标签:
3条回答
  • 2020-11-28 05:40

    The following should do what you want:

    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)
    
    0 讨论(0)
  • 2020-11-28 05:43

    In fact, in R, this operation is very easy:

    If the matrix 'a' contains some NaN, you just need to use the following code to replace it by 0:

    a <- matrix(c(1, NaN, 2, NaN), ncol=2, nrow=2)
    a[is.nan(a)] <- 0
    a
    

    If the data frame 'b' contains some NaN, you just need to use the following code to replace it by 0:

    #for a data.frame: 
    b <- data.frame(c1=c(1, NaN, 2), c2=c(NaN, 2, 7))
    b[is.na(b)] <- 0
    b
    

    Note the difference is.nan when it's a matrix vs. is.na when it's a data frame.

    Doing

    #...
    b[is.nan(b)] <- 0
    #...
    

    yields: Error in is.nan(b) : default method not implemented for type 'list' because b is a data frame.

    Note: Edited for small but confusing typos

    0 讨论(0)
  • 2020-11-28 05:50

    It would seem that is.nan doesn't actually have a method for data frames, unlike is.na. So, let's fix that!

    is.nan.data.frame <- function(x)
    do.call(cbind, lapply(x, is.nan))
    
    data123[is.nan(data123)] <- 0
    
    0 讨论(0)
提交回复
热议问题