2013-10-16 6 views
5

Ich versuche, eine Tabelle aus einer CSV-Datei Komma getrennt zu erstellen. Ich bin mir bewusst, dass nicht alle Zeilen die gleiche Anzahl von Elementen haben, also würde ich etwas Code schreiben, um diese Zeilen zu eliminieren. Das Problem ist, dass es Zeilen gibt, die Zahlen (in Tausend) enthalten, die auch ein anderes Komma enthalten. Ich bin nicht in der Lage, diese Zeilen richtig aufzuteilen, hier ist mein Code:read.table mit Komma getrennten Werten und auch Kommata innerhalb jedes Elements

pURL <- "http://financials.morningstar.com/ajax/exportKR2CSV.html?&callback=?&t=EI&region=FRA&order=asc" 
res <- read.table(pURL, header=T, sep='\t', dec = '.', stringsAsFactors=F) 
x <- unlist(lapply(keyRatios, function(u) strsplit(u,split='\n')) [[1]]) 

Antwort

8

Sie benötigen "," Verwendung des quote = Argument von beiden read.table oder read.delim ...

res <- read.delim(pURL, header=F, sep=',', dec = '.', stringsAsFactors=F , quote = "\"" , fill = TRUE , skip = 2) 

Die seperator ist zu machen nicht "\t". Zahlen in Millionen geschrieben sind immer in dieser Datei zitiert, so dass Sie das quote Argument verwenden können, um R das Komma innerhalb der Anführungszeichen mit quote = "\"" ignorieren, und Sie möchten die ersten beiden Zeilen überspringen und fill = TRUE verwenden, um Leerzeichen zu füllen auf unebenen Linien.

head(res) 

#       2003-12 2004-12 2005-12 2006-12 2007-12 2008-12 2009-12 2010-12 2011-12 2012-12 TTM 
#2   Revenue EUR Mil 2,116 2,260 2,424 2,690 2,908 3,074 3,268 3,892 4,190 4,989 5,034 
#3   Gross Margin % 60.6 60.3 57.3 58.2 57.6 56.9 56.1 55.5 55.4 55.8 56.1 
#4 Operating Income EUR Mil  365  404  394  460  505  515  555  618  683  832 841 
#5  Operating Margin % 17.2 17.9 16.2 17.1 17.4 16.7 17.0 15.9 16.3 16.7 16.7 
#6  Net Income EUR Mil  200  227  289  331  371  389  402  472  518  584 594 
#7 Earnings Per Share EUR 3.90 4.30 5.44 6.22 3.48 3.62 3.78 4.36 4.82 2.77 2.80 

stelle ich die Spaltennamen von res danach so ...

names(res) <- res[1,]; res <- res[-1,] 

Es ist besser Formatierung gab.

+0

vielen dank für diese tolle antwort! – nopeva

+0

@ AP13 Sie sind sehr willkommen. Vielen Dank für die Bereitstellung des reproduzierbaren Beispiels! :-) –