R: Lesen.Tabelle interpretiert \r neue Zeile

Zusammenfassung

Ich versuche zu Lesen, twitter-Daten mit read.table. Aber ich habe Zeilen beendet, nur in \r die Probleme verursacht, so möchte ich überspringe ein paar Zeilen.

Daten-format

Werden die Daten in eine tab-getrennte csv-und in der folgenden form:

id \t userid \t date \t latitude \t longitude \t location \t tweet \r\n

(Hinweis: ich fügte Leerzeichen für die Lesbarkeit, und die \t, \r und \n sind, wie erwartet, TAB, CR und LF)

Einige Beispiele sind:

488397447040086017  1220042672  20140713190000  -22.923528  -43.238966  Rio de Janeiro, Rio de Janeiro  os moradores da minha rua devem me odiar
488397446960381952  1960969112  20140713190000  60.998575   68.998468   Ханты-Мансийск, Ханты-Мансийск  Вот интересом, мне одной пофиг на футбол?
488397446997762049  1449959828  20140713190000  32.777693   -97.307257  Fort Worth, TX  Buena suerte Argentina

Lesen in Daten

Gab es einige Probleme (# als Kommentar ' als quote-Zeichen, Codierung, ...), die ich teilweise gelöst:

readTweets <- function(fileName) {
  # read tweets from file
  tweets <- read.table(fileName, sep = "\t", quote = "", comment.char = "",
                       col.names = c("id", "user", "date", "latitude", 
                                     "longitude", "location", "tweet"),
                       colClasses = c("numeric", "numeric", "character",
                                      "double", "double", "character",
                                      "character"), encoding = "utf8")

  tweets
}

Wie Sie leicht erkennen können ich habe auch die colClasses parameter zu geben, werden die Felder einige nützliche Typen (ich habe auch die Spalte Datum, um POSIXct, aber ich habe zu tun, die Formatierung, die mich - Seite Suche: gibt es eine Möglichkeit, Funktionen zu importierten Spalten automatisch?).

Der Fehler

Dieser arbeitete auf einem kleinen test-set wie oben angegeben. Allerdings, wenn ich versuchte, Sie zum laden eines größeren Datensatzes, ich bekam die folgende Fehlermeldung:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'a real', got '(:'

Ein wenig von der Suche über den Datei-zeigt den folgenden Eintrag:

488397464438071297  403662206   20140713190004  19.320504   -76.426316      @Toneishe_Lovee @purifiedhoran 
(:

Diese sieht aus wie es ist nur ein Zeilenumbruch an der falschen Stelle! Das ist ein großes problem jetzt, wie kann ich sagen, dass eine Linie ist eine neue Linie oder nicht? Und warum ist es so? Ich beschloss, einen genaueren Blick und fand heraus, dass (Bereiche wieder Hinzugefügt, jetzt siehst du, warum ich geschrieben das format mehr genau) mit dem "alle Zeichen" - Option in Notepad++, wie der Eintrag eigentlich Aussehen:

488397464438071297 \t 403662206 \t 20140713190004 \t 19.320504 \t -76.426316 \t @Toneishe_Lovee @purifiedhoran \r (: \r\n

Hinweis: die CR vor dem smiley.

Die einfache Lösung

Ich irgendwie "lösen" dieses problem durch das Lesen in der ersten Spalte als Zeichen, füllen sich die Zeilen und die Einstellung leere Felder NA und dann mit complete.cases:

readTweets <- function(fileName) {
  # read tweets from file
  tweets <- read.table(fileName, sep = "\t", quote = "", comment.char = "",
                       col.names = c("id", "user", "date", "latitude", 
                                     "longitude", "location", "tweet"),
                       colClasses = c("character", "numeric", "character",
                                      "double", "double", "character",
                                      "character"), encoding = "utf8",
                       fill = TRUE, na.strings = TRUE)
  # remove incorrect rows and convert id to numeric
  tweets      <- tweets[complete.cases(tweets[,c("id", "user", "date")]),]
  tweets$id   <- as.numeric(tweets$id)
  rownames(tweets) <- NULL
  tweets
}

Ich Frage mich immer noch, wenn es sogar möglich, geben Sie CRs in twitter oder die person, die mir die csv-Dateien einfach nur versaut das format bis.

Die professionelle Lösung

Ist es möglich, überspringen die nicht vollständige Zeilen (ohne Verarbeitung aller Daten wieder) so, dass ich das colClass numerische ID direkt?

OS/File/etc.

Wie gewünscht, in den Kommentaren hier einige weitere technische Informationen:

  • $Plattform: "x86_64-w64-mingw32"
  • $system: "x86_64, mingw32"
  • $svn rev: "66115"
  • $version.string: "R-version 3.1.1 (2014-07-10)"
  • Betriebssystem: Windows 8 (ich habe nicht erwarten, dass R laufen mit meiner mingw-installation)

Beispiel-Datei:

  • Download, 788 B, csv (tab-getrennt), enthält 5 tweets-einschließlich der fehlerhafte (der zweite)
  • - Datei-format UTF-8 ohne BOM mit Notepad++ erkennt die Zeilenenden in Dos\Windows
  • Ohne eine Beispiel-Datei, um mit zu spielen, ist es schwer, eine Probe mit dem gleichen bytes sind Ihnen zu tun, alle Tests. Auch, was das OS und der R-version sind Sie als Zeilenumbrüche unterscheiden sich vom OS.
  • Wo sollte ich Sie am besten hochladen von Dateien für stack-überlauf, so dass Sie für Generationen? Ich bin mit Windows, aber die Datei selbst sollte nicht unterscheiden sich von Betriebssystem zu Betriebssystem. R ist die version 3.1.1. Ich füge die Informationen zu der Frage.
Schreibe einen Kommentar