如何将NA更改为缺失值指示器?

时间:2013-08-13 17:46:11

标签: r na

我有一些因子值表明循环模式:

BM HB HFA HFZ HM HNA HNFA HNFZ HNZ NEA NEZ NWA NWZ NA NZ SA SEA SEZ SWA SWZ SZ TB TM TRM TRW U WA WS WW WZ

其中一个因素是称为NA的流通模式。 当我使用该数据时,R将NA模式解释为缺失值。有没有办法对R说NA是一个合适的值?

以下是一些数据样本:

   df <- structure(list(data = structure(list(sec = c(0, 0, 0, 0, 0, 0, 
0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
    hour = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), mday = c(21L, 
    21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L), mon = c(0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), year = 46:55, wday = c(1L, 
    2L, 3L, 5L, 6L, 0L, 1L, 3L, 4L, 5L), yday = c(20L, 20L, 20L, 
    20L, 20L, 20L, 20L, 20L, 20L, 20L), isdst = c(0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("sec", "min", "hour", 
"mday", "mon", "year", "wday", "yday", "isdst"), class = c("POSIXlt", 
"POSIXt")), gwl = structure(c(4L, NA, 24L, 14L, 4L, 14L, 12L, 
13L, 14L, 2L), .Label = c("", "BM", "HB", "HFA", "HFZ", "HM", 
"HNA", "HNFA", "HNFZ", "HNZ", "NEA", "NEZ", "NWA", "NWZ", "NZ", 
"SA", "SEA", "SEZ", "SWA", "SWZ", "SZ", "TB", "TM", "TRM", "TRW", 
"U", "WA", "WS", "WW", "WZ"), class = "factor")), .Names = c("data", 
"gwl"), row.names = 2546:2555, class = "data.frame")

2 个答案:

答案 0 :(得分:1)

是的,factor如果您将其引用为NA,则会接受character

levels(df$gwl) <- c(levels(df$gwl), "NA")
df$gwl[is.na(df$gwl)] <- as.factor("NA")

测试出来:

> table(is.na(df$gwl))

FALSE 
   56 
> table(df$gwl=="NA")

FALSE  TRUE 
   55     1 

答案 1 :(得分:1)

阅读?factor

如果需要在R中的字符向量中替换NA值,请执行以下操作:

 vec[is.na(vec)] <- "NA"

在你的情况下,它有点复杂,因为它是一个因素,在这种情况下,SeñorO的答案就点添加“NA”级别而言,尽管我认为不需要as.factor函数。需要理解的重点是“NA”与NA_character_不同。

在输入数据时你应该使用colClasses = c(“POSIXct”,字符“),这样就不会有POSIXlt列。这会让你很难理解错误。你应该避免使用POSIXlt作为data.frame列类。