na.strings applied to a dataframe

前端 未结 4 518
無奈伤痛
無奈伤痛 2021-01-18 07:41

I currently have a dataframe in which there are several rows I would like converted to \"NA\". When I first imported this dataframe from a .csv, I could use na.strings=c(\"A

相关标签:
4条回答
  • 2021-01-18 07:51

    Just assign the NA values directly.

    e.g.:

    x <- data.frame(a=1:5, b=letters[1:5])
    # > x
    #   a b
    # 1 1 a
    # 2 2 b
    # 3 3 c
    # 4 4 d
    # 5 5 e
    
    # convert the 'b' and 'd' in columb b to NA
    x$b[x$b %in% c('b', 'd')] <- NA
    # > x
    #  a     b
    # 1 1    a
    # 2 2 <NA>
    # 3 3    c
    # 4 4 <NA>
    # 5 5    e
    
    0 讨论(0)
  • 2021-01-18 08:03

    Since we don't have your data I will use mtcars. Suppose we want to set values anywhere in mtcars that are equal to 4 or 19.2 to NA

    ind <- which(mtcars == 4, arr.ind = TRUE)
    mtcars[ind] <- NA
    

    In your setting you would replace this number by "D" or "E"

    0 讨论(0)
  • 2021-01-18 08:07
    data[ data == "D" ] = NA
    

    Note that if you were trying to replace NA with "D", the reverse (df[ df == NA ] = "D") will not work; you would need to use df[is.na(df)] <- "D"

    0 讨论(0)
  • 2021-01-18 08:17

    Here's a way to replace values in multiple columns:

    # an example data frame
    dat <- data.frame(x = c("D", "E", "F", "G"), 
                      y = c("A", "B", "C", "D"), 
                      z = c("X", "Y", "Z", "A"))
    #   x y z
    # 1 D A X
    # 2 E B Y
    # 3 F C Z
    # 4 G D A
    
    # values to replace
    na.strings <- c("D", "E", "F")
    
    # index matrix 
    idx <- Reduce("|", lapply(na.strings, "==", dat))
    
    # replace values with NA
    is.na(dat) <- idx
    
    dat
    #     x    y z
    # 1 <NA>    A X
    # 2 <NA>    B Y
    # 3 <NA>    C Z
    # 4    G <NA> A
    
    0 讨论(0)
提交回复
热议问题