我有一些因子值表明循环模式:
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")
答案 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列类。