2017-11-18 3 views
1

Ich verwende diesen Code pretty nice, um eine multiple t.test durchzuführen, die die unabhängige Variable konstant hält!Dplyr und mehrere t-Test (die gleiche IV halten)

data(mtcars) 
library(dplyr) 
vars_to_test <- c("disp","hp","drat","wt","qsec") 
iv <- "vs" 
mtcars %>% 
    summarise_each_(
    funs_( 
     sprintf("stats::t.test(.[%s == 0], .[%s == 1])$p.value",iv,iv) 
    ), 
    vars = vars_to_test) 

Leider wurde dplyr aktualisiert und ich habe mit Blick auf diesen Bericht

summarise_each() veraltet. Verwenden Sie stattdessen summarise_all(), summarise_at() oder summarise_if(). Um funs über eine Auswahl von Variablen abzubilden, verwenden summarise_at()

Wenn ich den Code für _all ändern, an oder _if, doest diese Funktion nicht mehr arbeiten. Ich suche einen Rat und vielen Dank für Ihre Unterstützung.

Dank

Antwort

1

Statt einen String-Ausdruck mit sprintf zu erstellen und es dann bewerten, können wir das die ‚vs‘ es Symbol konvertieren und dann bewerten es

library(dplyr) 
mtcars %>% 
    summarise_at(vars(vars_to_test), funs( 
    try(stats::t.test(.[(!! rlang::sym(iv)) == 0], .[(!! rlang::sym(iv)) == 1])$p.value) 
)) 
#   disp   hp  drat   wt   qsec 
#1 2.476526e-06 1.819806e-06 0.01285342 0.0007281397 3.522404e-06 

verwenden auswerten Wenn wir wollten wirklich einen Ausdruck analysieren, verwenden Sie die rlang_parse_expr und rlang::eval_tidy zusammen mit sym

library(rlang) 
eval_tidy(parse_expr("mtcars %>% summarise_at(vars(vars_to_test), 
       funs(t.test(.[(!!sym(iv))==0], 
            .[(!!sym(iv))==1])$p.value))")) 
#   disp   hp  drat   wt   qsec 
#1 2.476526e-06 1.819806e-06 0.01285342 0.0007281397 3.522404e-06 
+0

Danke, @akrun. Könnten Sie bitte einen Code angeben, dass ich diesen t.test zu einem t.test mit ~ Funktion ersetzen könnte? Dieser t.test gibt ein Ergebnis unter Berücksichtigung von zwei kontinuierlichen Variablen und mein Ziel ist ein kontinuierliches dv in zwei Gruppen (kategorial) – Luis

+0

@Luis Es ist nicht klar aus Ihren Kommentaren. Könntest du als neue Frage posten? – akrun

+0

Danke. Ja, dieser Code hat meine Frage gelöst. Ich werde dort klicken! @akrun – Luis

Verwandte Themen