2
votes

Arrondir toutes les colonnes numériques sauf une dans le tableau

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


0 commentaires

3 Réponses :


0
votes

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)


0 commentaires

5
votes

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.


2 commentaires

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.



2
votes

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)


1 commentaires

Cela semble plus propre que de forcer une colonne numérique à un caractère