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