dplyr, function, length und NAs

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Juergen
Beiträge: 5
Registriert: Do Jul 06, 2023 5:51 pm

dplyr, function, length und NAs

Beitrag von Juergen »

Hallo Leute,
ich bin neu hier und habe gerade ein kleines Problem mit den o.g. Stichpunkten. Ich habe mehrere (4) data.frame mit 12-15 cols und 500 rows und möchte jeweils 1-2 Tabellen mit den statistischen "Grunddaten" (n, mean, sd, var, q0,025, q0,05 q1, median ...) erstellen. Die cols sind unterschiedlich lange Messreihen. Leider kann ich innerhalb der von mir geschriebenen Funktion die length nicht ohne NAs auslesen. Wo habe ich was übersehen, bin falsch abgebogen, ...?
VG juergen

Code: Alles auswählen

##### Fehler bei dplyr, function, length, rm.na####

####       Erzeugen Vectoren und DF
a<- rpois(n=10, lambda=8.5) #Vector erzeugen
b<- rpois(n=10, lambda=10.5) #Vector erzeugen
b[6]<-NA     # Werte durch NAs ersetzen
b[8:10]<-NA # Werte durch NAs ersetzen

#### data.frame erzeugen
DF.zu <- data.frame(a, b ) 

###Test
length(b) # 10 "falsch"
length(b[!is.na(b)]) # 6 gewünschter Wert

####         Auswertung
library(dplyr)

FUNC.summarystats <- function(DF.zu){
  DF.SUMMERY <-data.frame(
    n      = sapply(DF.zu, length), # hier funktioniert na.rm =TRUE nicht
    mean   = sapply(DF.zu, mean, na.rm =TRUE )
    #sd , var, median, ...
  )
  return(DF.SUMMERY) 
}
### Ansicht
FUNC.summarystats(DF.zu) # n=10 fuer b ist ja falsch
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: dplyr, function, length und NAs

Beitrag von EDi »

Hier mal einpaar Ideen:

Code: Alles auswählen

length(na.omit(b))
length(b[!is.na(b)])
sum(!is.na(b))
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: dplyr, function, length und NAs

Beitrag von EDi »

In deiner Function könnte das dann so aussehen:

Code: Alles auswählen

FUNC.summarystats <- function(DF.zu){
  DF.SUMMERY <-data.frame(
    n      = sapply(DF.zu, \(x) length(x[!is.na(x)])), 
    mean   = sapply(DF.zu, mean, na.rm =TRUE )
    #sd , var, median, ...
  )
  return(DF.SUMMERY) 
}
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Juergen
Beiträge: 5
Registriert: Do Jul 06, 2023 5:51 pm

Re: dplyr, function, length und NAs

Beitrag von Juergen »

Hallo,
danke,
verdammt seid ihr hier schnell.
"\x" verstehe ich zwar noch nicht aber..
mit x ersetzt du die Variable von "length(x)" und dann kann man wieder die Optionen von "length" mitgeben, die ja scheinbar innerhalb der "function" nicht zur Verfügung stehen?

Vielen Dank das funktioniert wie gewünscht!
VG juergen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: dplyr, function, length und NAs

Beitrag von EDi »

"\x" verstehe ich zwar noch nicht aber..
\(x) ist nur die Kurzform from function(x), siehe

Code: Alles auswählen

?`function`
Mann kann an sapply ein beliebige funktion übergeben. Hier eine sogenannte "anoynme" function weil sie nur im sapply aufruf lebt (und keinen Namen hat wie z.B: length weil sie nicht vorher definiert wurde).

Code: Alles auswählen

sapply(DF.zu, length)
und

Code: Alles auswählen

sapply(DF.zu, \(x) length(x) )
sind das geiche, nur gibt mir letzere mehr flexibilität weil ich in funktionen alles anstellen mit meinen Objekten kann.

Nennt sich dann "Funktionales Programmieren" und R ist sehr gut darin (Auch im Meta-programming btw).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Juergen
Beiträge: 5
Registriert: Do Jul 06, 2023 5:51 pm

Re: dplyr, function, length und NAs

Beitrag von Juergen »

Danke für die schnelle Hilfe und auch für die gute Erklärung.
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: dplyr, function, length und NAs

Beitrag von bigben »

Trivia: Der Backslash an dieser Stelle ist am ehesten aus der Sprache Haskell übernommen, wo er stellvertretend für ein kleines Lambda (λ) eingesetzt wurde. Ich glaube, man kann Haskell inzwischen in utf-8 programmieren und ein echtes λ im Code verwenden. Das möchte ich in R auch können!

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten