Vorbemerkung

R bietet Ihnen weitreichende Flexibilität, mit verschiedenen Dateiformaten zu arbeiten.


Das Dateisystem

head(list.files(.libPaths()[1]))

Funktionen für Dateien und Pfade

| Funktion | Beschreibung | |----------|--------------| | list.files() | Auflisten von Dateien und Verzeichnissen | | mkdir() | Anlegen eines neuen Verzeichnisses | | setwd() | Setzen des Arbeitsverzeichnisses | | getwd() | Was ist das gültige Arbeitsverzeichnis | | file.path() | Vektoren zu Pfad verbinden | | path.expand() | Tilde in Pfadangaben durch vollständigen Pfad ersetzen | | file.exists() | Logischer Test ob Verzeichnis oder Pfad existiert | | basename() | Dateiname ohne Pfadangabe | | dirname() | Übergeordnetes Verzeichnis einer Dateiangabe |


Navigation im Dateisystem

path.expand("~")
tempdir()
tempfile()

Einlesen und Schreiben von Daten

| Funktion | Beschreibung | |----------|--------------| | scan() | Einlesen von Vektoren (aus Datei oder interaktive Eingabe) | | cat() | Schreiben von Vektoren | | readLines() | zeilenweises Einlesen von character-Vektoren | | writeLines() | zeilenweises Schreiben von character-Vektoren | | read.table(), read.csv(), read.csv2(), read.delim(), read.delim2() | Einlesen von Tabellen | | download.file() oder curl::curl_download() | Download von Dateien |


Datenformate - Paketempfehlungen

| Datenformat | Paket | |-------------|-------| | SPSS (.sav) / STATA (.dta) | foreign oder haven | | JSON (.json) | jsonlite | | Excel (.xlsx) | openxlsx | | XML (.xml) | xml2 | | csv (.csv) / tsv (.tsv) | readr |


Beispiel

Einlesen einer Excel-Datei ...

excel_online <- "https://opendata-duisburg.de/sites/default/files/Corona%2030.04.2021.xlsx"
data <- openxlsx::read.xlsx(xlsxFile = excel_online)

Nachbereinigung der Zellen ...

library(readr)
data[[1]] <- parse_date(gsub("\u00A0", "", data[[1]]), format = "%d.%m.%Y", trim_ws = TRUE)
purge <- function(x){
  loc <- readr::locale(grouping_mark = ".")
  readr::parse_number(x, locale = loc, trim_ws = TRUE, na = "\u00A0\u00A0")
}
for (col in colnames(data[2:ncol(data)])) data[[col]] <- purge(data[[col]])

Ergebnis

DT::datatable(data, options = list(pageLength = 8L), rownames = FALSE)
head(data, 15)

Einlesen des csv-Dateiformats

library(readr)
tab_csv <- readr::read_delim(
  file = "https://opendata-duisburg.de/sites/default/files/Corona%2030.04.2021.csv",
  col_types = cols(col_date(format = "%d.%m.%Y"), col_number(), col_number(), col_number(), col_number()),
  locale = locale(decimal_mark = ",", grouping_mark = "."),
  delim = ";",
  na = c("", "\u00A0")
)

Zur Sicherheit: Sind die Daten identisch?

sapply(
  2:ncol(data),
  function(i) identical(sum(data[[i]], na.rm = TRUE), sum(tab_csv[[i]], na.rm = TRUE))
)

JSON

json_url <- "https://opendata-duisburg.de/api/action/datastore/search.json?resource_id=00766064-4cab-4f40-8f67-82ec6b14d6ca"
json_data <- jsonlite::fromJSON(json_url)
tab <- json_data$result$records
for (i in 2:ncol(tab)) tab[[i]] <- as.integer(tab[[i]])
head(tab, n = 3)
tail(tab, n  = 3)


ablaette/learningR documentation built on July 1, 2023, 1:11 a.m.