Ich habe in einer großen Datendatei in R mit dem folgenden BefehlAnzahl der eindeutigen Obs durch Variable in einer Datentabelle
data <- as.data.set(spss.system.file(paste(path, file, sep = '/')))
Der Datensatz enthält Spalten lesen, die nicht angehören sollen, und enthalten nur Leerzeichen. Dieses Problem hat damit zu tun, dass R neue Variablen erstellt, die auf den Variablenbezeichnungen basieren, die an die SPSS-Datei angehängt sind (Source).
Leider konnte ich nicht die Optionen ermitteln, die zur Lösung des Problems erforderlich sind. Ich habe alles ausprobiert: fremdes :: read.spss, muisc: spss.system.file und Hemisc :: spss.get, ohne Glück.
Stattdessen möchte ich den gesamten Datensatz (mit Geisterspalten) einlesen und unnötige Variablen manuell entfernen. Da die Geisterspalten nur Leerzeichen enthalten, möchte ich alle Variablen aus meiner data.table entfernen, in der die Anzahl der eindeutigen Beobachtungen gleich eins ist.
Meine Daten sind groß, daher werden sie im data.table-Format gespeichert. Ich möchte einen einfachen Weg finden, um die Anzahl der eindeutigen Beobachtungen in jeder Spalte zu überprüfen und Spalten zu löschen, die nur eine einzige Beobachtung enthalten.
require(data.table)
### Create a data.table
dt <- data.table(a = 1:10,
b = letters[1:10],
c = rep(1, times = 10))
### Create a comparable data.frame
df <- data.frame(dt)
### Expected result
unique(dt$a)
### Expected result
length(unique(dt$a))
Ich möchte jedoch die Anzahl der obs für eine große Datendatei berechnen, so dass jede Spalte mit Namen Referenzierung nicht erwünscht ist. Ich bin kein Fan von eval (parse()).
### I want to determine the number of unique obs in
# each variable, for a large list of vars
lapply(names(df), function(x) {
length(unique(df[, x]))
})
### Unexpected result
length(unique(dt[, 'a', with = F])) # Returns 1
Es ist für mich das Problem scheint, dass
dt[, 'a', with = F]
ein Objekt der Klasse gibt "data.table". Es macht Sinn, dass die Länge dieses Objekts 1 ist, da es sich um eine data.table handelt, die 1 Variable enthält. Wir wissen, dass data.frames wirklich nur Listen von Variablen sind, und in diesem Fall ist die Länge der Liste nur 1.
Hier ist Pseudocode für, wie ich die Lösung beheben würde, mit dem data.frame Weg:
Jeder Einblick, wie ich effizienter nach der Anzahl der eindeutigen Beobachtungen nach Spalte in einer data.table fragen könnte, wäre sehr willkommen. Alternativ können Sie empfehlen, Beobachtungen zu löschen, wenn nur eine einzige Beobachtung in einer data.table vorhanden ist.
+1 Wie gesagt, hatte ich das Gefühl, dass ich meinen Ansatz vereinfachen könnte ... aber ich würde mit Ihrer Lösung nicht haben kommen. Verdammt, das ist ordentlich ... –