2016-12-11 5 views
0

Ich importiere eine große Datenmenge in R und neugierig, wenn es eine Möglichkeit gibt, schnell durch die Spalten zu gehen und zu identifizieren, ob die Spalte kategorische Werte, numerische, Datum usw. hat str(df) oder class(df), die Spalten kommen meistens falsch beschriftet zurück.Identifizieren Sie kategoriale Variablen beim Importieren von Datensätzen in R

Zum Beispiel sind einige Spalten als numerisch gekennzeichnet, aber es gibt nur 10 eindeutige Werte in der Spalte (von 1 bis 10), was darauf hinweist, dass es sich tatsächlich um einen Faktor handeln sollte. Es gibt andere Spalten, die nur 11 eindeutige Werte haben, die eine Bewertung darstellen, von 0-5 in Schritten von 0,5. Eine andere Spalte hat Ländercodes (172 Werte), die von 1-230 reichen.

Gibt es eine Möglichkeit, schnell zu erkennen, ob eine Spalte ein Faktor sein sollte, ohne jede der Spalten zu durchlaufen, um die Natur der Variablen zu verstehen? (Es gibt viele Spalten im Datensatz)

Vielen Dank!


Im Moment habe ich Variationen des folgenden Codes unter Verwendung von den ersten beiden Fällen zu fangen:

as.numeric(df[,51])     #convert the column to numeric 
len = length(unique(df[,51]))  #find number of unique values 
diff = max(df[,51]) - min(df[,51]) #calculate difference between min and max 
ord = (len - 1)/diff    # calculate the increment if equally spaced 

#subtract the max value from second to max value to find the actual increment (only uses last two values) 
step = sort(unique(df[,51]),partial=len)[len] - 
sort(unique(df[,51]),partial=len-1)[len-1] 

ord == step       #check if the last increment equals the implied increment 

geht jedoch davon aus, dass dieser Ansatz jede der Variablen gleich beabstandet sind (z Beispiel, inkrementiert 0,5) und testet nur den Abstand zwischen den letzten beiden Werten. Dies würde keine Spalte fangen, die c (1,2,3,5,4,5,5,6) enthält, die 6 eindeutige Werte hat, aber ungleiche Abstände in der Mitte (nicht, dass dies in meinem Datensatz üblich ist).

Antwort

1

Es ist nicht klar, wie viele unterschiedliche Werte einen Faktor vs einer numerischen Variablen anzeigen würde, aber Sie können alle Variablen untersuchen, um zu sehen, was in Ihrer Daten ist mit

table(sapply(df, function(x) { length(unique(x))})) 

und wenn Sie sich entscheiden, dass die Grenze zwischen Faktor und numerisch ist k Sie die Faktoren, die mit

which(sapply(df, function(x) {length(unique(x)) < k})) 
+0

Hilfreiche identifizieren können, aber es gibt keine wirkliche Cutoff im Datensatz zwischen Ziffern-/Faktor, weshalb ich mit einer Änderung des Codes in der Frage gepostet gearbeitet habe zu versuchen, Faktoren auf andere Weise zu identifizieren –

Verwandte Themen