2016-04-20 8 views
-2

Ich lerne gerade R von Grund auf neu und versuche die Anzahl der NA's in einer gegebenen Tabelle zu zählen, aggregiert mit der ID der Datei, aus der sie stammt. Ich möchte dann diese Information in einem neuen Datenrahmen ausgeben, der nur die ID und die Summe der darin enthaltenen NA-Zeilen zeigt. Ich habe mir einige ähnliche Fragen angeschaut, aber alle scheinen mit sehr kurzen Datensätzen zu arbeiten, während meine vergleichsweise lang ist (10k + Zeilen), so dass ich nicht jede einzelne Zeile zusammenfassen kann.NA-Werte nach ID zählen?

Idealfall, wenn ich mit einer Datentabelle namens „Data“ mit insgesamt vier Spalten und einer Spalte mit dem Namen „ID“ beginnen, würde Ich mag einen Datenrahmen zur Ausgabe, die einfach ist:

[ID] [NA_Count] 

1 500 

2 352 

3 100 

Vielen Dank im Voraus ...

+0

Versuchen Sie 'Bibliothek (dplyr); Bibliothek (tidyr); sammeln (Daten, Var, Val, -ID)%>% group_by (ID)%>% zusammenfassen (CountNA = Summe (is.na (Val))) ' – akrun

+0

Willst du in einem anständigen lesen? Anzahl der Dateien und zählen Sie dann die Gesamtzahl der fehlenden Werte aus jeder Datei? Wenn ja, wie sind die Dateien strukturiert? Gibt es mehrere Variablen pro Datei? – lmo

+0

Bitte werfen Sie einen Blick auf den folgenden Link, um ein minimales reproduzierbares Beispiel zusammenzustellen. [minimales Beispiel] (http://stackoverflow.com/help/mcve). – lmo

Antwort

0

So etwas wie die folgenden funktionieren soll, obwohl ich das Datum gehe davon ist immer da, und Feld 1 und Feld 2 ist numerisch:

# get file names and initialize a vector for the counts 
fileNames <- list.files(<filePath>) 
missRowsVec <- integer(length(fileNames)) 

# loop through files, get number of 
for(filePos in 1:length(fileNames)) { 
    # read in files **fill in <filePath>** 
    temp <- read.csv(paste0(<filePath>, fileNames[filePos]), as.is=TRUE) 

    # count the number of rows with missing values, 
    # ** fill in <fieldName#> with strings of variable names ** 
    missRowsVec[filePos] <- sum(apply(temp[, c(<field1Name>, <field2Name>)], 
           function(i) anyNA(i))) 
} # end loop 

# build data frame 
myDataFrame <- data.frame("fileNames"=fileNames, "missCount"=missRowsVec) 

Dies ist eine sein kann, Bit dicht, aber es sollte mehr oder weniger funktionieren. Probieren Sie kleine Teile davon aus, wie zum Beispiel eine innere Funktion, um zu sehen, wie das Zeug funktioniert.