Seite 1 von 1

Variable auswählen in Datensatz

Verfasst: Do Mai 06, 2021 11:38 am
von gming11
Ich habe eine Frage für einen Datensatz und die Auswahl von Variablen.

Angenommen ich habe:

Code: Alles auswählen

Var1 <- c(1,2,3)
Var2 <- c(4,5,6)
Var3 <- c(7,8,9)
Data <- data.frame(Var1,Var2,Var3)
Nun nöchte ich eine Funktion basteln, die mir n und den Mittelwert der i-ten Variable ausrechnet mit der Gruppierungsvariable Var3

Code: Alles auswählen

f_x <- function(i){
  group_by(Data,Var3) %>%
    summarize(count = n(),
              mean = mean(Data[,i]), na.rm = TRUE))}

f_x(1)
Dies funktioniert leider nicht, manuell wenn ich statt Data[,i] die Variable Var1 oder Var2 eingeben funktioniert es. Was stimmt an der Syntax nicht?

Re: Variable auswählen in Datensatz

Verfasst: Fr Mai 07, 2021 9:51 am
von jogo
Hallo gming,
gming11 hat geschrieben: Do Mai 06, 2021 11:38 am Ich habe eine Frage für einen Datensatz und die Auswahl von Variablen.

Angenommen ich habe:

Code: Alles auswählen

Var1 <- c(1,2,3)
Var2 <- c(4,5,6)
Var3 <- c(7,8,9)
Data <- data.frame(Var1,Var2,Var3)
dies erzeugt 4 Objekte. Ich würde das so machen:

Code: Alles auswählen

Data <- data.frame(Var1= c(1,2,3), Var2= c(4,5,6), Var3= c(7,8,9))
... manuell wenn ich statt Data[,i] die Variable Var1 oder Var2 eingeben funktioniert es.
Kannst Du bitte diesen Teil nochmal als Code zeigen?

Gruß, Jörg

Re: Variable auswählen in Datensatz

Verfasst: Fr Mai 07, 2021 10:25 am
von gming11
Hallo,

ja einfach:

Code: Alles auswählen

f_x <- function(i){
  group_by(Data,Var3) %>%
    summarize(count = n(),
              mean = mean(Var1, na.rm = TRUE))}

f_x(1)
nun soll ich statt var1 aber durch die Funktion mittels 1 oder 2 jeweils Var1 oder Var2 auswählen.

Danke dir!

Re: Variable auswählen in Datensatz

Verfasst: Mo Mai 10, 2021 10:08 am
von jogo
Hallo gming,

gehört das na.rm=TRUE zum Aufruf von mean() ?
Dann stimmt bei

Code: Alles auswählen

group_by(Data,Var3) %>%
    summarize(count = n(), mean = mean(Data[,i]), na.rm = TRUE))
etwas nicht.
... und wenn ich richtig zähle, hast Du eine schließende Klammer zuviel.
Gab es denn keine entsprechende Fehlermeldung?

Dein Datenbeispiel ist auch nicht recht günstig, weil eine Gruppierung nach $Var3 alles in einzelne Beobachtungen auflöst.

Aber ich glaube, ich weiß, was Du meinst. Auch dies funktioniert nicht:

Code: Alles auswählen

f_x2 <- function(i){
  group_by(Data,Var3) %>%
    summarize(count = n(),
              mean = mean(Data$Var1, na.rm = TRUE))}

f_x2(1)
Wahrscheinlich liegt es daran, was group_by() und summarize() machen -- das ist so tiefgreifend in der inneren Organisation des Ablaufs, dass man nicht einfach bei summarize() die Varaiblen on-the-fly tauschen kann.

Ein work-around:

Code: Alles auswählen

f_x2 <- function(i) {
  Data$neuX <- Data[, i]
  Data %>% group_by(Var3) %>%
    summarize(count = n(), mean = mean(neuX, na.rm = TRUE))
}

f_x2(1)
f_x2(2)
Gruß, Jörg

Re: Variable auswählen in Datensatz

Verfasst: Mo Mai 10, 2021 7:58 pm
von EDi
Das ist bekannt? https://dplyr.tidyverse.org/articles/programming.html

Also

Code: Alles auswählen

function(data, var = NULL){

  data %>%
  group_by(Var3) %>%
    summarize(count = n(),
              mean = mean( {{ var }}, na.rm = TRUE)
      )
  }
Man kann wunderbar mit dplyr programmieren, aber es braucht etwas mehr als Standard-R (wobei programmieren mit subset() ähnlich schwer wäre...)

Re: Variable auswählen in Datensatz

Verfasst: Di Mai 11, 2021 1:10 pm
von gming11
Hallo euch beiden, super danke die Option mit dplyr ist echt sehr gut! Danke dafür EDI ! Und auch danke jogo mir ist nun klar, warum das nicht funktioniert, und nicht zum gewünschten Output führt.

Liebe Grüße