Les 2. Inlezen, bewerken en bewaren
2.1 een simpel overzicht
Ik begin deze les met een simpel overzicht. Degene die alleen de basisprincipes willen weten van het inlezen of laden van data en het bewaren van data hebben in eerste instantie genoeg aan deze les 2.1, en kunnen dan door naar les 3. Degene die iets meer willen weten raad ik aan, ook de verder lessen 2 te lezen.
c
Voor het inlezen van kleine hoeveelheden gegevens is de functie “c” (van het Engelse “combine”) die we al eerder zagen het handigst
> y <- c(2,5,1,0,3)
> y
[1] 2 5 0 3
Heb je nu een fout gemaakt door bijvoorbeeld een komma te typen tussen 1 en 0 terwijl je eigenlijk 10 wou typen, dan hoef je niet alles weer over te typen, Gebruik het pijltje ↑ om het laatste getypte commando te voorschijn te toveren. Met behulp van de andere pijltjes om door het commando te bewegen en de rest van het toetsenbord (in dit geval alleen de “del” knop) kun je je fout verbeteren. Probeer het maar eens.
> y <- c(2,5,10,3)
> y
[1] 2 5 10 3
scan
De functie scan
kan hetzelfde als c:
> y <- scan()
> 2 5 10 3
[1] 2 5 10 3
Na ייn keer op "enter" drukken begin je een nieuwe rij. na twee keer achter elkaar op "enter" drukken stopt het inlezen. Deze functie is ook heel goed te gebruiken samen met "copy" (van bijvoorbeeld een kolom met gegevens uit Excel of Notepad) en "paste" (naar R). Daarnaast kan de functie scan een file inlezen, bijvoorbeeld met de naam "gegevens.txt" .
> y <- scan(file="gegevens.txt")
Let bij wel op dat “gegevens.txt” in de default working directory moet staan. Welke dat is kun je te weten komen met
> getwd( )
A anders moet je tussen haakjes ook nog het pad aangeven waar “gegevens.txt” te vinden is. Met behulp van (bijvoorbeeld)
> setwd("C:/data")
Kun je ook de default directory veranderen (naar in dit geval C:/data).
read.table
Voor het inlezen van een file kun je ook read.table gebruiken.
> y <- read.table(file="gegevens.txt")
Ook hier geldt weer dat "gegevens.txt" in de default working directory moet staan. Anders moet je het pad toevoegen of de default directory veranderen.
read.table maakt default een dataframe aan (terwijl scan default een numerieke vector aanmaakt). De variabelen binnengehaald met read.table hebben (tenzij je ze anders hebt genoemd) default namen V1, V2, V3,…enzovoort. Deze kunnen aangeroepen worden met X$V1, X$V2, ...of X[“V1”], X[“V2”],…of X[,1], X[,2],....als je filenaam X.txt is.
Achter de filenaam kun je tussen de haakjes, gescheiden door comma’s, nog allerlei commando’s zetten in de read.table. Hier een overzicht van de meest gebruikte:
header |
= T or F; True or False geeft aan op de file al of niet variabele namen op de eerste regel heeft staan. |
sep |
Geeft aan of en zo ja wat voor scheidingsteken tussen de waarden wordt gebruikt. Bijvoorbeeld sep=”\t” als er een tab is gebruikt. |
quote |
Geeft aan welk symbool is gebruikt voor character variabelen |
dec |
Geeft aan welk symbool is gebruikt voor de decimale punt. |
row.names |
Een vector met de namen van de rijen |
col.names |
Een vector met de namen van de variabelen |
as.is |
= T or F; Houdt de waarde van characters als characters respectievelijk zet deze om naar numerieke factoren. |
na.string |
Geeft aan welke term is gebruikt voor een missende waarde. Dit wordt dan geconverteerd naar NA. |
nrows |
Maximum aantal rijen |
skip |
Geeft aan welke regels eerst overgeslagen moeten worden bij het inlezen van de data |
blank.lines.skip |
= T or F. Slaat lege regels over bij T. |
comment.char |
Geeft aan met welk symbool gebruikt wordt aan het begin van regels die mogen worden over geslagen (omdat ze alleen commentaar bevatten). |
scan is eigenlijk iets flexibeler dan read.table omdat je daarmee direct de “mode” van de variabelen kunt invoeren als volgt.
>X = scan(file = “gegevens.txt”, what = list (“”, 0, 0))
Hier staat dat “gegevens.txt uit 3 variabelen bestaat met eerst een character dan twee numerieke modes. Verder geldt hetzelfde lijstje als hierboven, met nog een aantal extras (zie ...blz 12?).
read.fwf
Het volgende commando is voor het inlezen van bestanden van een vast formaat.
>X = read.fwf(file = “hulp.txt”, widths=c(1, 4, 3))
Hierbij geeft widths aan dat de eerste variabele 1 karakter breed is, de tweede 4 en de derde 3!
read.csv
Data van een spreadsheet kun je binnenhalen met read.scv. Hierbij staat "scv" voor "comma seperated values". Je moet je spreadsheetdata dan eerst saven als een scv file. Dan kan R de file als volgt inlezen:
> read.scv(file="gegevens.csv")
read.mtp, en meer
Data van een ander ("foreign") statistisch programma zoals SAS, SPSS en MINITAB kun je ook binnenhalen. Minitabfiles bijvoorbeeld met read.mtp.
bewerken van data
Je kunt bestaande data bewerken met een spreadsheet interface binnen R met
> data.entry(x)
En als je niet eerst een vector x wilt aanmaken, kun je typen:
> data.entry(x=c(NA))
En hier kun je eenvoudig getallen intypen. Ook kun je van andere files (bv excel files gegevens copieren, met ‘copy’, en dan vervolgens met ‘paste’ de boel in de spreadsheet van R plakken.
Ook kun je de editor opstarten met edit. Wil je de ingetypte of veranderde gegevens bewaren dan zul je het volgende moeten typen
> x=edit(x)
bewaren van gegevens
Met behulp van write.table wordt een object (bijvoorbeeld een data.frame of vector) weggeschreven, naar de default directory.
> write.table(y, file = “y.Rdata”)
Ook nu weer kunnen, gescheiden door een comma, een aantal argumenten tussen de haakjes worden gevoegd.
y |
Naam van het object dat je wilt bewaren. Je kan ook meerdere objecten in een bestand bewaren. Je moet deze dan in het commando write.table scheiden door comma’s. |
file |
Geeft tussen haakjes de naam van het te bewaren bestand. |
append |
=T of F; bewaard reeds bestaande data (in het bestand met de zelfde naam) |
quote |
Geeft aan welk symbool is gebruikt voor character variabelen |
dec |
Geeft aan welk symbool is gebruikt voor de decimale punt. |
row.names |
Een vector met de namen van de rijen |
col.names |
Een vector met de namen van de variabelen |
eol |
Geeft het symbool waarmee een end of line wordt aangegeven. Bijvoorbeeld =”\n”. |
sep |
Geeft aan welk symbool er is gebruikt om velden te scheiden |
qmethod |
Geeft aan, als quote = TRUE, hoe character variabelen worden behandeld. Bij “e” wordt het “, bij “d” wordt het “” . |