Fehlende oder falsche Werte beim einlesen?

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Fehlende oder falsche Werte beim einlesen?

Beitrag von Isegrim »

Hallo,

ich bin ganz neu bei R und habe ein schönes Anfängerproblem.
Ich will die Daten aus der angehängten Datei einlesen und daraus einen Boxplot ausgeben lassen.
Das funktioniert aber wohl auf Grund der Datenstruktur nicht. Die Daten sind in der CSV Datei in Zeilen und Spalten angeben und zwar mit vielen leeren Zellen dazwischen. Ich glaube die leeren Zellen machen dann Probleme für den Boxplot. Also einfache frage an die Wissenden: Wie kann ich mir zu den Daten einen Boxplot ausgeben lassen?

Grüße und Danke...
Dateianhänge
p1.csv
(1.86 MiB) 94-mal heruntergeladen
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von schubbiaschwilli »

Gude!

Was ist denn dein Befehl, um die Daten einzulesen? Und über welche Spalten (sind ja einige) willst du plotten?

Dank&Gruß
Schubbiaschwilli
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von bigben »

Das ist zunächst mal ein valides CSV, das sich wie folgt einlesen lässt:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1683", dec = ".")
str(d)
In der Tat gibt es sehr viele Missings / leere Zellen. Es gibt auch keine Zeilen- oder Spaltenbeschriftungen. Ein erster Ansatz hin zu Boxplots könnte so aussehen:

Code: Alles auswählen

names(d) <- paste0("spalte", 1:217)
boxplot(d$spalte1, d$spalte2, d$spalte3, d$spalte4, notch = TRUE)
Wahlweise zum Plotten der Spalten 5 bis 15:

Code: Alles auswählen

boxplot(d[,5:15])
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von Isegrim »

schubbiaschwilli hat geschrieben: Di Feb 22, 2022 9:31 pm Gude!

Was ist denn dein Befehl, um die Daten einzulesen? Und über welche Spalten (sind ja einige) willst du plotten?

Dank&Gruß
Schubbiaschwilli
Also, ich habe das so probiert einzulesen:

Code: Alles auswählen

data_csv <- read.csv("p1.csv", na="NA", sep=";")
new_data <- data.frame(col1 = c(t(data_csv)), stringsAsFactors=FALSE, na="")
print(new_data)
Und der Boxplot soll aus allen Daten zusammen bestehen. Sprich, man könnte auch alles in eine Spalte hintereinander schreiben (wenn man das denn kann...)
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von Isegrim »

bigben hat geschrieben: Di Feb 22, 2022 9:34 pm Das ist zunächst mal ein valides CSV, das sich wie folgt einlesen lässt:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1683", dec = ".")
str(d)
In der Tat gibt es sehr viele Missings / leere Zellen. Es gibt auch keine Zeilen- oder Spaltenbeschriftungen. Ein erster Ansatz hin zu Boxplots könnte so aussehen:

Code: Alles auswählen

names(d) <- paste0("spalte", 1:217)
boxplot(d$spalte1, d$spalte2, d$spalte3, d$spalte4, notch = TRUE)
Wahlweise zum Plotten der Spalten 5 bis 15:

Code: Alles auswählen

boxplot(d[,5:15])
LG,
Bernhard
Danke für den Ansatz. Also der Boxplot soll aus allen Daten zusammen bestehen. Beschriftungen von Zeilen und Spalten sind daher nicht notwendig. Das die Daten in Zeilen und Spalten stehen lag nur an der Erhebung bzw. an der Darstellung der Rohdaten.
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von schubbiaschwilli »

Gude!

OK, ich hab' dann mit deiner Definition zum Einlesen einen data.frame mit einer Spalte erzeugt, und die ganzen Daten untereinander geschrieben, und mit na.omit die ganzen NAs rausgeworfen.
Ich hab' das mittels Schleife gebaut, vielleicht gibt es schnellere Methoden (sowohl was Laufzeit und auch Entwicklung angeht), aber: Es läuft erstmal.

Code: Alles auswählen

data_csv <- read.csv("p1.csv", na="NA", sep=";")
# new_data <- data.frame(col1 = c(t(data_csv)), stringsAsFactors=FALSE, na="")

for(i in 1:ncol(data_csv)){
  if(i==1){
      data <- data.frame(x=data_csv[,i])
    } else {
      data <- rbind(data, data.frame(x=data_csv[,i]))
  }  
}

data <- na.omit(data)
boxplot(data$x)
Dank&Gruß
Schubbiaschwilli
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von Isegrim »

super, vielen Dank...
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von bigben »

Hallo,
schubbiaschwilli hat geschrieben: Di Feb 22, 2022 11:19 pmIch hab' das mittels Schleife gebaut, vielleicht gibt es schnellere Methoden (sowohl was Laufzeit und auch Entwicklung angeht), ...
Es ist ja nichts schlecht an Schleifen, wenn das nicht alle zehntel Sekunde neu gerechnet werden muss. Ich sehe keinen Grund, sich für gut gemachte Schleifen zu entschuldigen. Aber R wäre nicht R, ginge das nicht auch ohne mit einer Chance auf bessere Lesbarkeit.

Nur, weil schubbiaschwilli indirekt danach gefragt hat: In dem Fall muss man sich klar machen, dass ein data.frame eine Liste ist, daher kann man ihn mit unlist behandeln. Das Löschen von NA ist auch nichts originelles, dafür gibt es na.omit:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1683", dec = ".")
d.complete <- d |> unlist() |> na.omit()
boxplot(d.complete)
Die Daten sind, sehr, sehr schief, sodass ich eine logarithmische Darstellung der negativierten Werte als Vorschlag anführen würde, z. B.

Code: Alles auswählen

library(ggplot2)
ggplot(data.frame(x = d.complete)) +
  geom_boxplot(aes(x = -1 *x)) +
  scale_x_continuous(trans = c("log10"),
                     name = "wie weit die Werte unter Null waren",
                     breaks = c(.01, .1, 1, 10, 100),
                     labels = c(.01, .1, 1, 10, 100)) 
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von schubbiaschwilli »

Gude!

Tatsächlich hatte ich gerade ein ähnliches Problem: Mehrere (identisch aufgebaute) csv-Dateien einlesen und verknüpfen - Wozu ich genau den Code genutzt habe (nur das der Dataframe mehr Spalten hatte, und mit dem rbind die Dateien bzw. Daten verknüpft wurden) - Der Code ist also recycelt - Und getestet.
Ich hab' deine Lösung auch mal ausprobiert, läuft auch einen Moment, ich müsste jetzt die Zeit stoppen, was schneller ist, Speicherverbrauch ist ähnlich - Aber lesbarer Code mit Schleifen hat auch was.

Dank&Gruß
Schubbiaschwilli
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Fehlende oder falsche Werte beim einlesen?

Beitrag von Athomas »

Tatsächlich hatte ich gerade ein ähnliches Problem: Mehrere (identisch aufgebaute) csv-Dateien einlesen und verknüpfen
Je nachdem, wie "groß" das Problem ist, solltest Du es (auch aus Performance-Gründen) mal mit data.table (fread + rbindlist) versuchen!
Antworten