2017-10-19 4 views
0

Ich benutze das Rassel-Paket, um einige Daten zu bereinigen und ich betrachte die erste Variable X in meinem Datensatz. Es wird berichtet, wenn ich auf der ersten Registerkarte die Registerkarte "Daten" mache, erhalte ich einige grundlegende Informationen über das Dataset und es heißt, dass die Variable X 1243 fehlende Werte hat. Dies ist auch der Wert, den ich bekomme, wenn ich sum(is.na(my_df[,1])) verwende.Gibt es verschiedene Arten von NAs?

Auf dem nächsten Registerkarte des „Explore“ Registerkarte, wenn ich „Zusammenfassung“ überprüfen, sagt sie jetzt, dass ich in Variable X

nur 942 NAs habe Wie kann ich Sinn dieser unterschiedlichen Zahlen macht? Ich habe ein wenig durch meinen Datensatz geblättert und einige Zeilen mit NAs betrachtet, die alle gleich aussehen (ich verstehe, dass es manchmal verschiedene Arten von NAs gibt).

(Side Frage: sum(is.na(my_df[,1]), na.rm = FALSE) und sum(is.na(my_df[,1]),na.rm = TRUE) beide produzieren auch die gleiche Zahl 1243, warum ich hätte erwartet, dass man mir length(my_df[,1])-1243 gibt?.)


EDIT Hier ist die Datenmenge, die dieses Problem hat : https://wetransfer.com/downloads/cf454b2c12857a4e3770102a7222422f20171019153755/516fb0.

Die Zahlen in denen sind etwas anders, statt 1243 haben wir 88 NA gemäß der Registerkarte "Data" in rattle() (oder, entsprechend, entsprechend summary(ten_df)), und 62 NAs nach dem "Explore" mit überprüfter Registerkarte Zusammenfassung

Aber jetzt vermute ich, dass mein Datensatz kaputt ist, weil ich vor dem Hochladen des vollständigen ursprünglich nur eine illustrative Spalte hochladen wollte. Aber wenn ich

ten_df = read.csv("ten.csv",sep=";") 
my_df = as.data.frame(ten_df[,3]) 

ausführen, da ich mit var2 in der dritten Spalte aussehen wollen und my_df war, was ich ursprünglich hochladen wollte, der letzte Befehl einen Fehler zurückgibt

Warning messages: 
1: In rep(no, length.out = length(ans)) : 
    'x' is NULL so the result will be NULL 

Auch wenn danach die Auswahl my_df, um es mit Rassel zu analysieren, sagt Klappern "0 Input-Variable" in der Leiste an der Unterseite, wo es Feedback gibt. Wie kann das sein?

+0

Wie für Ihre Seite Frage, 'is.na' kann nur zurückkehren' TRUE/false', Argument 'na.rm' irrelevant ist . Um dies zu sehen, versuche 'x <- c (1: 3, NaN, NA, 4, 5, NA); Summe (is.na (x)) '. Was den Unterschied in den gemeldeten Werten der fehlenden Werte betrifft, ist es schwer zu sagen, ohne die Daten zu sehen. Ich würde 'Zusammenfassung (X)' vertrauen. –

+0

@RuiBarradas Danke! – billyboy

Antwort

3

?NA

NA eine logische Konstante der Länge 1, die einen fehlenden Wert Indikator enthält. NA kann mit jedem anderen Vektortyp außer roh umgesetzt werden. Es gibt auch die Konstanten NA_integer_, NA_real_, NA_complex_ und NA_character_ der anderen atomaren Vektortypen, die fehlende Werte unterstützen: all dies sind reservierte Wörter in der R-Sprache.

class(NA)    # "logical" 
class(NA_integer_) # "integer" 
class(NA_real_)  # "numeric" 
class(NA_complex_) # "complex" 
class(NA_character_) # "character" 
is.na(NA)    # TRUE 
is.na(NA_integer_) # TRUE 
is.na(NA_real_)  # TRUE 
is.na(NA_complex_) # TRUE 
is.na(NA_character_) # TRUE 
identical(NA,NA_integer_) # FALSE 
identical(NA,NA_real_)  # FALSE 
identical(NA,NA_complex_) # FALSE 
identical(NA,NA_character_) # FALSE 
identical(NA_character_,as.character(NA)) # TRUE 
identical(NA_real_,as.numeric(NA))  # TRUE 
identical(as.logical(NA_real_),NA)  # TRUE 

So ist NA eine logical. Also warum benutzen wir NA so ziemlich überall, ohne uns um die Klasse zu sorgen?wegen Nötigung Regeln:

class(c(NA,1)[1])    # "numeric" 
identical(c(NA,1),c(NA_real_,1)) # TRUE 
c(NA_character_,1)    # [1] NA "1" 

Je nach class, NA könnte auch anders

Nun zurück zu Ihrer Frage gedruckt werden, kann ich nicht die erste Antwort, weil Sie keine reproduzierbare Daten zur Verfügung stellen, aber wie für warum sum(is.na(my_df[,1]), na.rm = FALSE) und sum(is.na(my_df[,1]),na.rm = TRUE), ist es, weil is.na(my_df[,1]) nur von TRUE und FALSE, nicht s gemacht wird.

Sie können auch versuchen length(na.omit(my_df[,1])).

EDIT:

Eine gegebene Spalte eines data.frame hat nur Elemente einer Klasse, so dass Sie sich nicht anders NA_character_ und NA_real_ in der gleichen Spalte.

Etwas, was oft passiert ist jedoch, dass Sie einige Zeichenfolgen haben, deren Wert "NA" ist, sollten Sie natürlich nicht is.na erwarten, um diese zu erkennen. In diesen Fällen können Sie df[df == "NA"] <- NA einen regelmäßigen NA s anstelle von "NA" Strings in Ihrem data.frame

+0

Danke, das ist eine wirklich gute, eingehende Antwort bis jetzt, ich habe viel von dir gelernt! Ich wünschte, ich könnte upvote, aber ich kann das erst, nachdem ich 15 Rep-Punkte habe; Sobald ich das erreicht habe, werde ich versuchen, nachträglich zu upvoten. Ich habe auch den Datensatz hochgeladen, könntest du ihn dir anschauen, damit auch die erste Antwort beantwortet werden kann? – billyboy

+0

Leider kann ich von meinem Arbeitscomputer aus nicht auf diese Website zugreifen, aber meine Vermutung ist, dass 'sum (is.na (df [, 1]))' Ihnen die richtige Antwort geben wird, und aus irgendeinem Grund, die alternativen Werte Sie Find sind entweder nicht aktuell oder nur Schätzung. Es würde helfen, einen Widerspruch durch Code-Befehle zu sehen und nicht, was Sie in Tabs sehen :). Sie können Ihren Datensatz auch auf eine vernünftige Größe zuschneiden und manuell erkunden, es ist schon nicht so groß. –

Verwandte Themen