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 |
FunctiesDatums 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 meegevenTabelletje$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 datumsDatums 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" TijdzonesMidden-Europese Tijd (MET) is in het engels CET voor Central European TimeVoor de gevorderde, ik weet niet of dit kloptDe volgende functies worden gebruikt door de WAR en KNMI dataas.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 |