Sök…


Introduktion

När vi inte vet vilket värde en variabel tar, säger vi att dess värde saknas, indikerat av NA .

Anmärkningar

Värden som saknas representeras av symbolen NA (ej tillgängligt). Omöjliga värden (t.ex. som ett resultat av sqrt(-1) ) representeras av symbolen NaN (inte ett tal).

Undersöker saknade data

anyNA rapporterar om det finns några saknade värden; medan is.na rapporterar saknade värden elementärt:

vec <- c(1, 2, 3, NA, 5)

anyNA(vec)
# [1] TRUE
is.na(vec)
# [1] FALSE FALSE FALSE  TRUE FALSE

ìs.na returnerar en logisk vektor som tvingas till heltalsvärden under aritmetiska operationer (med FALSE = 0, TRUE = 1). Vi kan använda detta för att ta reda på hur många saknade värden det finns:

sum(is.na(vec))
# [1] 1

Genom att utvidga detta tillvägagångssätt kan vi använda colSums och is.na på en dataram för att räkna NA: er per kolumn:

colSums(is.na(airquality))
#   Ozone Solar.R    Wind    Temp   Month     Day 
#      37       7       0       0       0       0 

Paketet naniar (för närvarande på github men inte CRAN) erbjuder ytterligare verktyg för att utforska saknade värden.

Läsa och skriva data med NA-värden

När du läser tabelluppsättningar med funktionerna read.* Söker R automatiskt efter saknade värden som ser ut som "NA" . Saknade värden representeras emellertid inte alltid av NA . Ibland indikerar en punkt ( . ), En bindestreck ( - ) eller ett teckenvärde (t.ex. empty ) att ett värde är NA . na.strings parametern för funktionen read.* Kan användas för att berätta R vilka symboler / tecken som måste behandlas som NA värden:

read.csv("name_of_csv_file.csv", na.strings = "-")

Det är också möjligt att indikera att mer än en symbol måste läsas som NA :

read.csv('missing.csv', na.strings = c('.','-'))

På liknande sätt kan NA skrivas med anpassade strängar med na argumentet för att write.csv . Andra verktyg för att läsa och skriva tabeller har liknande alternativ.

Använda NA: er från olika klasser

Symbolen NA är för ett logical saknat värde:

class(NA)
#[1] "logical"

Detta är bekvämt eftersom det lätt kan tvingas till andra atomiska vektortyper och därför vanligtvis är det enda NA du behöver:

x <- c(1, NA, 1)
class(x[2])
#[1] "numeric"

Om du behöver ett enda NA värde av en annan typ, använd NA_character_ , NA_integer_ , NA_real_ eller NA_complex_ . För saknade värden på fancy klasser fungerar vanligtvis inställning med NA_integer_ ; till exempel för att få ett saknat värde Datum:

class(Sys.Date()[NA_integer_])
# [1] "Date"

TRUE / FALSE och / eller NA

NA är en logisk typ och en logisk operatör med en NA kommer att returnera NA om resultatet är tvetydigt. Nedan utvärderar NA OR TRUE till TRUE eftersom åtminstone en sida utvärderar till TRUE , men NA OR FALSE returnerar NA eftersom vi inte vet om NA skulle ha varit TRUE eller FALSE

NA | TRUE
# [1] TRUE  
# TRUE | TRUE is TRUE and FALSE | TRUE is also TRUE.

NA | FALSE
# [1] NA  
# TRUE | FALSE is TRUE but FALSE | FALSE is FALSE.

NA & TRUE
# [1] NA  
# TRUE & TRUE is TRUE but FALSE & TRUE is FALSE.

NA & FALSE
# [1] FALSE
# TRUE & FALSE is FALSE and FALSE & FALSE is also FALSE.

Dessa egenskaper är användbara om du vill deluppsätta en datauppsättning baserad på vissa kolumner som innehåller NA .

df <- data.frame(v1=0:9, 
                 v2=c(rep(1:2, each=4), NA, NA), 
                 v3=c(NA, letters[2:10]))

df[df$v2 == 1 & !is.na(df$v2), ]
#  v1 v2   v3
#1  0  1 <NA>
#2  1  1    b
#3  2  1    c
#4  3  1    d

df[df$v2 == 1, ]
     v1 v2   v3
#1     0  1 <NA>
#2     1  1    b
#3     2  1    c
#4     3  1    d
#NA   NA NA <NA>
#NA.1 NA NA <NA>

Utelämnar eller ersätter saknade värden

Omkodning av saknade värden

Vanligtvis är saknade data inte kodade som NA i datasätt. I SPSS till exempel representeras ofta saknade värden av värdet 99 .

num.vec <- c(1, 2, 3, 99, 5)
num.vec
## [1]  1  2  3 99  5

Det är möjligt att direkt tilldela NA med underinställning

num.vec[num.vec == 99] <- NA

Emellertid är den föredragna metoden att använda is.na<- som nedan. ?is.na ( ?is.na ) anger:

is.na<- kan ge ett säkrare sätt att ställa in saknad. Det uppför sig till exempel olika faktorer.

is.na(num.vec) <- num.vec == 99

Båda metoderna återgår

num.vec
## [1]  1  2  3 NA  5

Tar bort saknade värden

Värden som saknas kan tas bort på flera sätt från en vektor:

num.vec[!is.na(num.vec)]
num.vec[complete.cases(num.vec)]
na.omit(num.vec)
## [1] 1 2 3 5

Exklusive saknade värden från beräkningar

När du använder aritmetiska funktioner på vektorer med saknade värden kommer ett saknat värde att returneras:

mean(num.vec) # returns: [1] NA

Parameteren na.rm berättar för funktionen att utesluta NA värden från beräkningen:

mean(num.vec, na.rm = TRUE) # returns: [1] 2.75

# an alternative to using 'na.rm = TRUE':
mean(num.vec[!is.na(num.vec)]) # returns: [1] 2.75

Vissa R-funktioner, som lm , har en na.action parameter. Standardvärdet för detta är na.omit , men med options(na.action = 'na.exclude') kan standardbeteendet för R ändras.

Om det inte är nödvändigt att ändra standardbeteendet, men för en specifik situation na.action annan na.action na.action parametern na.action inkluderas i funktionssamtalet, t.ex.

 lm(y2 ~ y1, data = anscombe, na.action = 'na.exclude')


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow