ladyLein startpagina

0. R install & library
1. R start
2. Vectoren
(een rij waarden)

3. Matrixen
(tabellen)

4. Statistieken
(min, max, gemiddelde, standaard defiatie)

5. Factoren
(-categorieën/typen)

6. Data frames
(wat is een dataframe,
inlezen txt en csv bestanden)

7. Correlatie in de grafiek
8. Plot
9. GGplot2
(lijn, staaf, taart)

10. Functies
if else, for, while, repeat
quantile, aggregate

string
datum
11. SQL / dplyr
(gegevens ophalen uit tabellen)

12. WAR meetkastjes en KNMI
(data ophalen en in grafiek zetten)

13. Qgis
gegevens op de kaart zetten



Functies


Datums geven vaak gedoe voor een beginneling.
Die kunnen van het type datum zijn maar ook een string zijn.
Het zijn op de achtergrond getallen zodat je er ook mee kan rekenen.
Verder heb je nog te maken met tijdzones.

Ik heb nog een enorme "ruzie" met datums, dus misschien is dit niet foutloos!"
feedback graag naar

Datum van de computer date() en Sys.Date()

Sys.Date( ) geeft de datum van vandaag (van de computer)
antwoord "2018-01-20"
Sys.time() geeft de tijd van nu (van de computer) (kleine t ipv T)
"2018-01-20 12:34:14 CET"
date() geeft de datum en tijd van dit moment
antwoord "Sat Jan 20 11:58:54 2018"

Datum netjes neerzetten format()

today <- Sys.Date()
format(today, format="%B-%d-%Y")
"januari-20-2018"

Betekenis van de tekens


format(date(),format="%d-%m-%Y")
antwoord "Sat Jan 20 12:17:26 2018", maar dat vroeg ik niet
Zoals je ziet, ik als beginneling heb gedoe met datums
format(Sys.Date(),format="%d-%m-%Y")
antwoord "20-01-2018"
format(Sys.Date(),format="%a/%d/%m/%y")
antwoord "za/20/01/18"

String naar datum as.Date()

Bij as.Date altijd format meegeven
Tabelletje$Kolommetje<-as.Date("17-01-2018", "%d-%m-%Y")
antwoord is toch 2016-12-31
mydates <- as.Date(c("2007-06-22", "2004-02-13"))
# number of days between 6/22/07 and 2/13/04
days <- mydates[1] - mydates[2]

Days(), month(), year(), week(), weekdays()

x<-as.Date("20-01-2018", "%d-%m-%Y")
mday(x)
20
month(x)
1
year(x)
2018
week(x)
3
weekdays(x)
"zaterdag"

Rekenen met datums

Datums in R zijn getallen.
1970-01-01 = 1
1970-01-02 = 2 enz
Eerdere datums zijn negatieve getallen
1969-21-31 = -1

x<-as.Date("2018-01-20")
y<-as.Date("1960-05-24")
x-y
antwoord Time difference of 21060 days

x<-as.Date("2018-01-20")
x+10
antwoord "2018-01-30"

Tijdzones

Midden-Europese Tijd (MET) is in het engels CET voor Central European Time

Voor de gevorderde, ik weet niet of dit klopt

De volgende functies worden gebruikt door de WAR en KNMI data
as.POSIXct() is een functie dat de datum in het juiste format zet
as.POSIXct
Eén van de twee functies om POSIXlt en POSIXct om te zetten (converteren) naar een ander format.
Dit zijn datum en tijd objecten.
as.POSIXct(x, tz = "", ...)
as.POSIXlt(x, tz = "", ...)
- wat moet er geconverteerd worden: x
- wat is de tijdzone: tz
tz = "" dan gebruikt hij de huidige tijdzone
die kan je opvragen met Sys.timezone() antwoord "Europe/Berlin"
Names "UTC" and its synonym "GMT" are accepted on all platforms.
Midden-Europese Tijd (MET) is in het engels CET voor Central European Time

data$localtime<-as.POSIXlt(ts, "CET")
ts<-as.POSIXct(data$timestamp, origin="1970-01-01", tz="UTC")
attributes(data$localtime)$tzone <- "CET"

strptime() omzetten datumtijd in een format dat geschikt is voor POSIX
p=paste(knmidata$day,knmidata$hour, sep="")v strptime(p, "%Y%m%d%H") antwoord "2017-12-24 01:00:00 CET"

# Maak een vector met de vroegste en laatste tijd
tsrange <- range(data$localtime)
# rond deze start- en eindtijd af naar het dichtstbijzijnde kwartierv startkwartier<-as.POSIXlt(round(as.double(tsrange[1])/(15*60))*(15*60),origin=(as.POSIXlt('1970-01-01')))
eindkwartier<-as.POSIXlt(round(as.double(tsrange[2])/(15*60))*(15*60),origin=(as.POSIXlt('1970-01-01')))
# maak een reeks van het beginkwartier tot het eindkwartier in stappen van 15 minuten
tssequence <- seq(startkwartier+15*60,eindkwartier-15*60, by=15*60)
# maak een data frame met een lege matrix voor alle stations en kwartieren
matrix<-data.frame(matrix(,nrow=length(levels(factor(data$id))),ncol=length(tssequence) ) )

# van iedere reeks metingen van een station,
# berekenen we de lineaire interpolartie naar de kwartier tijden
j<-0
for (i in as.numeric(levels(factor(data$id))) ) {
tree <- subset(data, id==i)
ltime <- tree$localtime
if (length(ltime) > 1) {
j<-j+1
interpol<-approx( as.numeric(ltime),tree$temperature, xout=as.numeric(tssequence), rule=1, method = "linear", ties=mean) matrix[j,] <- c(interpol$y)
}
}
Terug naar top