J'ai créé de nombreuses tables de sortie à partir de tests t et d'ANOVA et j'aimerais arrondir toutes les colonnes numériques des tables à l'exception de la colonne contenant les p-values (p.value).
Code actuel:
library(dplyr) library(broom) a <- rnorm(100, 0.75, 0.1) t.test <- t.test(a, mu = 0.5, alternative = "greater") %>% broom::tidy() %>% mutate_if(is.numeric, round, 2)
Le problème est que cela arrondit également ma p-value qui est alors affichée comme 0. J'ai déjà une fonction pour rapporter les p-values pour mon fichier markdown donc je me demande comment je peux garder la valeur p (p.value) inchangée tout en arrondissant toutes les autres colonnes numériques à 2 chiffres?
Merci
3 Réponses :
pas très sympa et pas déplyr, mais je pense que ça devrait faire l'affaire :)
sélectionnez tous les éléments de t.test qui sont numériques et non p.value et appliquez-leur arrondis
t.test[(names(t.test)[which(!names(t.test) %in% c("p.value") & sapply(t.test, class) == "numeric")])] = lapply(t.test[(names(t.test)[which(!names(t.test) %in% c("p.value") & sapply(t.test, class) == "numeric")])], round, 2)
Si vous voulez vraiment arrondir toutes les colonnes numériques sauf la colonne p.value
, assurez-vous simplement que votre colonne p.value
ne le fait pas être arrondi en le contraignant à un caractère avant l'arrondi, puis de nouveau au numérique après l'arrondi.
library(dplyr) library(broom) a <- rnorm(100, 0.75, 0.1) t.test <- t.test(a, mu = 0.5, alternative = "greater") %>% broom::tidy() %>% mutate(p.value = as.character(p.value)) %>% mutate_if(is.numeric, round, 2) %>% mutate(p.value = as.numeric(p.value)) t.test # A tibble: 1 x 8 estimate statistic p.value parameter conf.low conf.high method alternative <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> 1 0.76 28.3 1.52e-49 99 0.74 Inf One Sample t-test greater
Si vous voulez juste arrondir certaines colonnes , vous êtes probablement mieux utiliser mutate_at
comme @ user5249203 le promeut.
FYI: le fait de forcer le numérique au caractère peut créer des «NA» pour les données manquantes ou illisibles. Le moyen le plus sûr est le numérique -> caractère -> facteur ---> numérique
Oui, j'utiliserais normalement mutate_at
mais de cette façon je ne peux changer que la p.value indépendamment des autres colonnes, ce qui est un avantage car j'ai des tables avec de nombreux tests t et ANOVA, dont beaucoup ont différentes sorties et colonnes etc.
Vous pouvez faire simple mutate_at
library(dplyr) library(broom) a <- rnorm(100, 0.75, 0.1) t.test(a, mu = 0.5, alternative = "greater") %>% broom::tidy() %>% mutate_at(vars(- c(p.value,method,alternative)), round, 2) #> # A tibble: 1 x 8 #> estimate statistic p.value parameter conf.low conf.high method #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> #> 1 0.75 27.1 5.89e-48 99 0.74 Inf One S~ #> # ... with 1 more variable: alternative <chr>
Créé le 18/04/2019 par le paquet reprex (v0.2.1)
Cela semble plus propre que de forcer une colonne numérique à un caractère