2017-06-27 5 views
0

Ich bin ziemlich neu in R, und versuche zu verbessern, beim Schreiben von Code, der so effizient/schön wie möglich ist.Schreibe Liste r Funktion auf Datenframe Spalten iterieren

Ich wurde mit folgenden Aufgaben beauftragt: Überprüfen Sie die fehlenden Werte der Attribute "Alter" und "Name" des Datensatzes train.csv.

Ich möchte die Indizes der fehlenden Werte für jede Spalte in einem separaten Listenelement erzeugen. Ich habe den folgenden Code dafür geschrieben.

list(which(is.na(train$Age))) 
list(which(is.na(train$Name))) 

Mein Bauch sagt mir, dass, wenn Sie viele Schreiben mehrere Iterationen der gleichen Zeile des Codes sind, werden Sie wahrscheinlich nicht wissen, die Sprache sehr gut (keine Einwände?). Ich konnte das obige mit "apply" verdichten, aber diese Funktion operiert auf alle Spalten und nicht ausschließlich auf die beiden von Interesse.

apply(train, 2, function(x) which(is.na(x))) 

Ich könnte alternativ mit nur diesen beiden Spalten einen neuen Datenrahmen erstellen, aber das Niederlagen der Zweck dieser insgesamt Frage ...

Danke für alle Hinweise im Voraus sehr viel!

Antwort

0

zu laufen, um Ihre Anwendung nur auf die Spalten von Interesse, können Sie

ändern
apply(train, 2, function(x) which(is.na(x))) 

zu

apply(train[,c("Age", "Name")], 2, function(x) which(is.na(x))) 

Zusätzliche Erklärung: train[,c("Age", "Name")]alle die Zeilen aus train (nichts nimmt vor die ,) und nur die Spalten "Age" und "Name" (Liste der Spalten nach der , halten)

+0

Vielen Dank! – StaticNomad

0

Um eine Funktion zu erstellen, können Sie Ihre Anweisung verwenden und wie folgt ändern:

train <- data.frame(Age = c(NA,"x100",NA), Name = c("b","c",NA)) 

my.is.na <- function(data.colname){ 
    apply(train[names(train) == data.colname], 2, function(x) which(is.na(x))) 
} 

Dann können Sie rufen Sie die Funktion durch den Variablennamen Ihres Datensatzes.

> my.is.na("Name") 
Name 
    3 
> my.is.na("Age") 
    Age 
[1,] 1 
[2,] 3 

Daten:

> train 
    Age Name 
1 <NA> b 
2 x100 c 
3 <NA> <NA> 
Verwandte Themen