預先
對標題最明顯的答案是缺失NA在 R中表示。 虛擬資料:
x <- c("a", "NA", "<NA>", NA)
我們可以使用 將 的所有元素轉換x為字符x_paste0 <- paste0(x)。這樣做之后,第二個和第四個元素是相同的 ( "NA"),據我所知,這就是為什么沒有辦法x_paste0將x.
添加NA
但作業addNA表明NA,代表缺失的不僅僅是它本身。在x只有最后一個元素是丟失。讓我們變換向量:
x_new <- addNA(x)
x_new
[1] a NA <NA> <NA>
Levels: <NA> a NA <NA>
有趣的是,第四個元素,即缺失的用<NA>而不是用 顯示NA。此外,現在第四個元素看起來與第三個相同。我們被告知沒有遺漏,因為當我們嘗試時,any(is.na(x_new))我們得到FALSE. 在這一點上,我會認為關于缺少什么元素(第三個或第四個)的資訊就像在x_paste0. 但這不是真的,因為我們實際上可以反向轉換x_new。看:
as.character(x_new)
[1] "a" "NA" "<NA>" NA
如何as.character知道第三個元素是"<NA>",而第四個元素是實際缺失,即NA?
uj5u.com熱心網友回復:
這可能是base:::print.factor()方法的不潔。
x <- c("a", "NA", "<NA>", NA)
addNA(x)
# [1] a NA <NA> <NA>
# Levels: <NA> a NA <NA>
但:
levels(addNA(x))
# [1] "<NA>" "a" "NA" NA
因此,沒有重復的級別。
uj5u.com熱心網友回復:
通常,您在讀取資料(csv 或其他來源)時會嘗試防止這種情況發生。在您的矢量樣本資料上使用 read.table 有點愚蠢的演示。
x <- c("a", "NA", "<NA>", NA)
x <- read.table(text = x, na.strings = c("NA", "<NA>", ""), stringsAsFactors = F)$V1
x
[1] "a" NA NA NA
但是如果你想在之后修復它
x <- c("a", "NA", "<NA>", NA)
na_strings <- c("NA", "<NA>", "")
unlist(lapply(x, function(v) { ifelse(v %in% na_strings, NA, v) }))
[1] "a" NA NA NA
關于因素和 addNA 的一些說明
# to not be confused with character values pretending to be missing values but are not
x <- c("a", "b", "c", NA)
x_1 <- addNA(x)
x_1
# do not get confused on how the displayed output is
# [1] a b c <NA>
# Levels: a b c <NA>
str(x_1)
# Factor w/ 4 levels "a","b","c",NA: 1 2 3 4
is.na(x_1) # as your actual values are 1, 2, 3, 4
# [1] FALSE FALSE FALSE FALSE
is.na(levels(x_1))
# [1] FALSE FALSE FALSE TRUE
# but nothing is lost
x_2 <- as.character(x_1)
str(x_2)
# chr [1:4] "a" "b" "c" NA
is.na(x_2)
# [1] FALSE FALSE FALSE TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393458.html
上一篇:僅在R中從列日期類中提取
下一篇:選擇表中倒數第二小的日期
