Ich lese Daten über ein HTTP-Zugriffsprotokoll. Ich habe eine Datei mit Spalten für die IP-Adresse, das Jahr, den Monat, den Tag, die Stunde und die angeforderte URL. Ich lese die Datei wie folgt ein:Subsetting Datenrahmen in R nach dem Einlesen von Daten mit Scan
ipdata = scan(file="sample_r.log", what=list(ip="", year=0, month=0, day=0, hour=0, verb="", url=""))
Dies scheint zu funktionieren. R-Studio sagt, dass ipdata eine Liste ist [7] und "Namen (ipdata)" gibt
[1] "ip" "year" "month" "day" "hour" "verb" "url"
Damit kühl zu sein scheint. Ich wollte etwas Spaß machen, zum Beispiel einige Daten für eine bestimmte Stunde grafisch darstellen. Ich habe versucht, eine Teilmenge zu tun:
Diese Daten sieht bemerkenswert anders als der erste Datenrahmen. s ist eine Liste [297275] und die folgenden nicht richtig funktioniert:
> table(ipdata$verb)
GET POST
2870709 1596748
> table(s$verb)
character(0)
Bin ich dazu den richtigen Weg zu gehen? In der Regel wickle ich meinen Datenrahmen in eine Tabelle() und katapuliere oder zeichne ihn dann mit einem Balken. Ist R ein guter Weg, dies zu tun? Ich möchte sagen "Zeige mir alle Top-URLs in Stunde 3", zum Beispiel. Oder "Wie oft wurde diese IP-Adresse pro Stunde angezeigt?"
aktualisieren Es sieht aus wie von read.table
statt scan
mit konnte ich einen Datenrahmen erhalten. Anscheinend gibt Scan eine Liste von Listen oder etwas zurück? Definitiv verwirrend zu einem n00b wie ich, aber ich fühle mich jetzt gut.
Ah! Führt "read.table" im Wesentlichen ein "as.data.frame" aus, wenn es fertig ist? – Dave
Nun, 'read.table' weist" data.frame "als die Klasse des zurückgegebenen Objekts zu. Es prüft viele Namen und Längen und Klassen, bevor es die Klasse zuweist. Gib einfach 'read.table' an deiner Konsole ein. Zusätzlich zu der Menge der Konsistenz Durchsetzung, werden Sie eine Wertschätzung dafür bekommen, warum es manchmal langsam ist. –
Super, danke nochmal. Ich gewöhne mich immer noch an R und R Studio und habe gerade heute Morgen von der Hilfefunktion erfahren :) – Dave